【编程之美】如何判断单链表里面是否有环?
来源:互联网 发布:淘宝自定义页面 编辑:程序博客网 时间:2024/05/19 08:24
1.如何判断单链表里面是否有环?
算法的思想是设定两个指针p, q,其中p每次向前移动一步,q每次向前移动两步。q肯定一直在p前面。那么如果单链表存在环,则p和q相遇;否则q将首先遇到null。
这里一个简单的理解是,p和q同时在操场跑步,其中q的速度是p的两倍,当他们两个同时出发时,p跑一圈到达起点,而q此时也刚 好跑完两圈到达起点。
2.如何判断单链表的环的长度?
这个比较简单,知道q 已经进入到环里,保存该位置。然后由该位置遍历,当再次碰到该q 位置即可,所迭代的次数就是环的长度。
3. 如何找到链表中第一个在环里的节点?
假设链表长度是L,前半部分长度为k-1,那么第一个再环里的节点是k,环的长度是 n, 那么当q=2p时, 什么时候第一次相交呢?当q指针走到第k个节点时,q指针已经在环的第 k mod n 的位置。即p和q 相差k个元素,从不同的起点开始,则相交的位置为 n-k, 则有了下面的图:
从图上可以明显看到,当p从交点的位置(n-k) ,向前遍历k个节点就到到达环的第一个几点,节点k.
算法就很简单: 一个指针从p和q 中的第一次相交的位置起(n-k),另外一个指针从链表头开始遍历,其交点就是链表中第一个在环里的交点。
4. 如果判断两个单链表有交?第一个交点在哪里?
这个问题画出图,就可以很容易转化为前面的题目。
将其中一个链表中的尾节点与头节点联系起来,则很容发现问题转化为问题3,求有环的链表的第一个在环里的节点。
0 0
- 【编程之美】如何判断单链表里面是否有环?
- 如何判断单链表里面是否有环?
- 如何判断单链表里面是否有环【转载】
- 如何判断单链表里面是否有环【转载】
- 如何判断单链表里面是否有环
- 如何判断单链表里面是否有环
- 如何判断单链表里面是否有环?
- 如何判断单链表里面是否有环
- 如何判断单链表里面是否有环?
- 如何判断单链表里面是否有环?
- 判断链表里面是否有环
- 判断单链表里面有没有环
- 判断单链表里面有没有环
- 判断单链表里面有没有环
- 判断单链表里面有没有环
- 判断单链表里面有没有环
- 判断单链表里面有没有环
- 判断单链表里面有没有环
- 事务的含义理解
- UVALive 5846
- POJ 1200 Crazy Search(简单哈希)
- 数据库测试点
- UVALive 7066 Intersection 求圆环面积并
- 【编程之美】如何判断单链表里面是否有环?
- Xutils 框架使用(一)之导入sample项目
- Memcached之Window和Linux安装(1)
- C/C++之回调函数
- Spring现有版本和下载地址
- zen-Coding在Notepad++中的使用
- Nim 博弈
- 【转】我的华为面试经历——技术服务
- 高精度减法,高精度乘法