• 快指针走完了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;
    }
}