思路:
快慢指针,快指针一次两步,慢指针一次一步
相遇时,慢指针不变,快指针指向头部
再次遍历,各一步,相遇时则是入环节点
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
ListNode fast=pHead;
ListNode slow=pHead;
while(fast!=null && fast.next!=null)//快指针两步,故都要判断
{
fast=fast.next.next;
slow=slow.next;
if(fast==slow)
break;
}
if(fast==null || fast.next==null)
return null;
fast=pHead;
while(fast!=slow)
{
fast=fast.next;
slow=slow.next;
}
return slow;
}
}