连表中环入口的节点

题目描述

一个链表中包含环,请找出该链表的环的入口结点。
思路:
具体思路可以参考网址:https://www.cnblogs.com/zhuzhenwei918/p/7491892.html
假设满指针速度v,经过t时间后,两个指针相遇,此时:w+y=v*t;
此时快指针速度为2*v,经过t时间后,假设快指针在环内行驶了1圈,此时:w+n+y = 2*v*t;
由上述两步可以得到:w+n+y = 2(w+y);
最终表示为:w = n-y。
经过上述分析,当找到第一次相遇的节点时,一个节点从头开始,一个节点从相遇点开始,两个节点相遇处即为环的入口节点。
public ListNode EntryNodeOfLoop(ListNode pHead)
    {
        if(pHead == null ||pHead.next == null) return null;
        ListNode low = pHead;
        ListNode fast = pHead;
        low = low.next;
        fast = fast.next.next;
        
        while(low!=fast){
            low = low.next;
            fast = fast.next.next;
        }
        fast = pHead;
        while(low!=fast){
            low = low.next;
            fast = fast.next;
        }
        return low;
    }
原文地址:https://www.cnblogs.com/yingpu/p/5833584.html