这题是上一题的基础上进行变化。
1. 先看代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
ListNode fast = pHead;
ListNode slow = pHead;
// 1.找到第一次相遇的位置
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;
// 2第一次相遇之后,将fast指向队首,并将速度改变为一步,再次相遇就是环的入口,请看相关的证明
fast = pHead;
while(fast != slow){
fast = fast.next;
slow = slow.next;
}
return fast;
}
}
2、看证明:来自题解
我觉得特别容易理解的一个证明了::::