- 快指针走完了n圈,路径为A+(n - 1)B + nC,慢指针走了A+B(慢指针走一步则快指针离慢指针近一步,慢指针与快指针距离小于一圈,则慢指针不可能走完一圈)
- 有A+(n+1)B + nC = 2(A+B),则A =(n-1)(B+C) + C
- 则相遇后快指针从起点出发,一次走一步,慢指针不变,两者则会相遇至环入口
- 图来自一颗闪闪发亮的马路星
public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { ListNode fast = pHead, slow = pHead; // 先找到相遇结点 while(fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; if(slow == fast) { break; } } if(fast == null || fast.next == null) { return null; } // 找到入口 fast = pHead; while(fast != slow) { fast = fast.next; slow = slow.next; } return fast; } }