链表中环的问题
2017-04-07 17:29
190 查看
Leetcode 141. Linked List Cycle 链表是否有环
两个指针一个一步一步的走,一个两步两步的走,相遇则就是有环public class Solution { public boolean hasCycle(ListNode head) { ListNode temp1 = head,temp2 = head; while(temp1 != null){ temp2 = temp2.next; if(temp1.next == null) return false; temp1 = temp1.next.next; if(temp1 == temp2) return true; } return false; } }
走两步的temp2和走一步temp1的两个指针相遇了之后,重新定义temp = head,temp走一步,temp1走一步,t他们两个相遇的时候就是环的入口,证明如下:Leetcode 142. Linked List Cycle II 找到环的入口
设temp1和temp2相遇一共走了t次,那么temp1走过的路程为t,temp2走过的路程为2t,设换长为l,则有2t-t = nl,即t= nl。设从链表头节点到链表环入口节点的长度为a,从头节点到相遇的节点的距离为d,则有t = a+d +ml(可能temp1也绕环了),根据上面的t=nl可知a+d = l(a+d只能是一倍的环长)public class Solution { public ListNode detectCycle(ListNode head) { ListNode temp1 = head,temp2 = head; while(temp1 != null && temp1 .next != null){ temp1 = temp1.next.next; temp2 = temp2.next; if(temp1 == temp2){ temp1 = head; while(temp1 != temp2){ temp1 = temp1.next; temp2 = temp2.next; } return temp1; } } return null; } }
相关文章推荐
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 关于链表追赶--链表中环的问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- [置顶] HashMap延伸---单向链表中环的问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 判断链表中是否有环 -- 有关单链表中环的问题
- 【转载】判断链表中是否有环 ----- 有关单链表中环的问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 链表中环的问题
- 链表中环的问题
- 链表中环问题详解
- java 链表中环的问题
- 《编程之美》读书笔记(十):“链表相交”扩展问题
- 看uCOS-II,第一个问题:不知道链表的意思
- 程序员面试题精选(33):两单向链表相交问题
- 使用链表实现Josephus环问题