Linked List Cycle II

找到相遇的点之后,只要让两个指针分别从head 和相遇点出发,走同样多的步数再相遇,就找到了链接开始的地方了。
要画个证明一下。

public class Solution {
public ListNode detectCycle(ListNode head) {
if(head == null) return null;
ListNode result = null, slow = head, fast = head;
int count = 0;
while(fast.next != null && fast.next.next != null) {
slow = slow.next;
fast = fast.next.next;
count++;
if(slow == fast) {
result = slow;
break;
}
}
if(result == null) return null;
slow = head;
fast = result;
while(slow != fast) {
slow = slow.next;
fast = fast.next;
}
return slow;
}
}


posted @ 2014-12-29 06:08  江南第一少  阅读(69)  评论(0)    收藏  举报