142. Linked List Cycle II

我们要保证快慢指针相遇时的迭代次数相同,于是快慢指针应该时从相同的位置出发,但是循环跳出的条件时相等,于是将快慢指针都前进一次。本题利用了相遇点总是距离环的起点的位置为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;
    }
   
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容