牛客NC3 链表中环的入口结点

题目如下:

avatar

主要思想就是首先利用快慢指针判断是否有环,如果有环,再根据下面的思想让快指针重头开始走,慢指针继续走,走到相遇就是环入口结点的地方:

avatar

代码如下:

public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        ListNode ft = pHead;
        ListNode fast = pHead;
        ListNode slow = pHead;
        while(fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
            if(fast == slow){
                while(slow != ft){
                    slow = slow.next;
                    ft = ft.next;
                }
                return ft;
            }
        }
        return null;
    }
}