题目叙述
题目分析
题目可以看做是一个数学问题,以下只给出结论,证明省略
1.设立快慢指针都从初始节点开始出发,快指针一次走两步,慢指针一次走一步,两者终会在环中的某处相遇。
2.在环中的某个相遇地点处,慢指针保持不变,快指针重新从链表的头部开始一次走一步,最终,两者相遇的地方就是环的入口节点
参考代码
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if(pHead==null || pHead.next==null) return null;
ListNode pfast = pHead;
ListNode pslow = pHead;
while (pfast!=null){
pfast = pfast.next.next;
pslow = pslow.next;
if (pfast == pslow)
break;
}
pfast = pHead;
while(pfast!=pslow){
pfast = pfast.next;
pslow = pslow.next;
}
return pslow;
}
}