思路:双指针
fast和slow指向头结点
fast一次走两步,slow一次走一步,第一次相遇停止。
fast指向头结点,slow原地不懂,让fast,slow每次走一步,当再次相遇,就是入口结点。
证明:
代码:
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
ListNode fast=pHead;
ListNode slow=pHead;
while(fast!=null&&fast.next!=null&&fast.next.next!=null){
fast=fast.next.next;
slow=slow.next;
if(fast==slow){
fast=pHead;
while(fast!=slow){
fast=fast.next;
slow=slow.next;
}
return fast;
}
}
return null;
}
}