链表中环的入口结点

88 阅读1分钟

链表中环的入口结点

给定一个链表,若其中包含环,则输出环的入口节点。

若其中不包含环,则输出null。
在这里插入图片描述
给定如上所示的链表:
输入:[1, 2, 3, 4, 5, 6]
输出:2
注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。
则输出环的入口节点3.

快慢指针

时间复杂度O(n)

class Solution {
    public ListNode entryNodeOfLoop(ListNode head) {
        if(head == null){
            return null;
        }
        ListNode fast = head;
        ListNode slow = head;
        while(fast.next.next != null && slow.next != null){
            fast = fast.next.next;
            slow = slow.next;
            if(fast.val == slow.val){
                fast = head;
                while(fast.next != null && slow.next != null){
                    fast = fast.next;
                    slow = slow.next;
                    if(fast.val == slow.val){
                        return slow;
                    }
                }
            }
        }
        return null;
    }
}