主要是 第一次相遇节点开始走D=(n-1)(s1+s2)+s1,,,,,,,n=1时,D=s1 ,所以从第一次相遇时,快指针已经绕了环一圈,而这时再从第一次相遇的节点开始,一个指针在链表头,一个指针在第一次相遇的节点,当这两个指针第一次相遇时的节点就是入环节点
可读代码:
public ListNode EntryNodeOfLoop(ListNode pHead) { if(pHead==null){ return pHead; } ListNode p1=pHead; ListNode p2=pHead; ListNode p3=pHead; boolean isHasCycle=false; while(p1!=null&&p2.next!=null){ p1=p1.next; p2=p2.next.next; if(p1==p2){ isHasCycle=true; break; } } ListNode res=null; if(isHasCycle){ while(p3!=null){ if(p1==p3){ res=p3; break; } p3=p3.next; p1=p1.next; } } return res; }