142. Linked List Cycle II

2017-09-27  本文已影响0人  namelessEcho

我们要保证快慢指针相遇时的迭代次数相同,于是快慢指针应该时从相同的位置出发,但是循环跳出的条件时相等,于是将快慢指针都前进一次。本题利用了相遇点总是距离环的起点的位置为L-S这一性质。L是环的长度,S是环的入点距离链表起点的位置。

public class Solution {
    public ListNode detectCycle(ListNode head) {
        if(head==null||head.next==null) return null;
        ListNode fast = head.next.next ;
        ListNode slow = head.next ;
        while(fast!=slow)
        {
            if(fast==null||fast.next==null)
                return null;
            fast=fast.next.next;
            slow=slow.next;
        }
        // now  meet 
         fast=head;

         while(slow!=fast)
        {
            fast=fast.next;
            slow=slow.next;
        }
        return fast;
    }
   
}
上一篇下一篇

猜你喜欢

热点阅读