LeetCode142. Linked List Cycle II

Posted 华仔要长胖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode142. Linked List Cycle II相关的知识,希望对你有一定的参考价值。

Difficulty:medium

 More:【目录】LeetCode Java实现

Description

Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

Note: Do not modify the linked list.

Follow up:
Can you solve it without using extra space?

Intuition

1) find out whether there is a cycle, refer to141. Linked List Cycle

2) if there is a cycle, we can get the meetingNode, meanwhile we use a pointer named entry to point to the head Node.

3) let the meetingNode and entry move one step at a time, where they meet is where the cycle begins.

why will they meet at the beginning of the cycle? here is the proof:

  1. define L1 as the distance between the head node and entry node;

  2.defined L2 as the distance between the entry node and meeting node;

  3.defined C as the length of the cycle

  We can know that:

   the distance of slow node=L1+L2; while the distance of fast node=L1+L2+n*C

  because of the speed, we have :

  2*(L1+L2)=L1+L2+n*C => L1=n*C-L2 => L1=(n-1)C+(C-L2)

  it means that: the distance between the head node and entry node equals the distance between the meeting node and entry node;

 

Solution

    public ListNode detectCycle(ListNode head) {
        if(head==null)
            return null;
        ListNode fast=head;
        ListNode slow=head;
        ListNode entry=head;
        while(fast.next!=null && fast.next.next!=null){
            fast=fast.next.next;
            slow=slow.next;
            if(fast==slow){
                while(entry!=slow){
                    entry=entry.next;
                    slow=slow.next;
                }
                return entry;
            }
        }
        return null;
    }

  

Complexity

Time complexity : O(n)

Space complexity : O(1)

 

What I\'ve learned

1. How to prove the distance relation.

 

 More:【目录】LeetCode Java实现

 

以上是关于LeetCode142. Linked List Cycle II的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-142-Linked List Cycle II

LeetCode 141, 142. Linked List Cycle I+II

leetcode-142. Linked List Cycle II

LeetCode142. Linked List Cycle II

[LeetCode] 142. Linked List Cycle II

LeetCode 142 Linked List Cycle II