142. Linked List Cycle II

    /*
     * 142. Linked List Cycle II 
     * 11.28 by Mingyang
     * 这个题目一开始自己做的时候把方法搞错了,这个是先快慢相遇,相遇后快的移动到head
     * 慢的快的一步一步走,直到相遇就是我们最终的点
     */
    public static ListNode detectCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        while (true) {
            if (fast == null || fast.next == null) {
                return null; // 遇到null了,说明不存在环
            }
            slow = slow.next;
            fast = fast.next.next;
            if (fast == slow) {
                break; // 第一次相遇在Z点
            }
        }
        slow = head; // slow从头开始走,
        while (slow != fast) { // 二者相遇在Y点,则退出
            slow = slow.next;
            fast = fast.next;
        }
        return slow;
    }
原文地址:https://www.cnblogs.com/zmyvszk/p/5529703.html