题目描述
一个链表中包含环,请找出该链表的环的入口结点。
思路:
具体思路可以参考网址: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; }