142. Linked List Cycle II

Initializestart = head
and slow = head
. After they move then compare them.
public class Solution {
public ListNode detectCycle(ListNode head) {
if(head == null || head.next == null) return head;
ListNode slow = head;
ListNode fast = head.next;
while(fast != slow) {
if(fast == null || fast.next == null)
return null;
slow = slow.next;
fast = fast.next.next;
}
// find the s = r - m + 1
// 两个pointer再走r-m步就能在s处相遇
ListNode start = head;
while(start != slow.next) {
start = start.next;
slow = slow.next;
}
return start;
}
}
Last updated
Was this helpful?