环形链表 II

一、题目描述

环形链表 II_第1张图片

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

二、题解 

对于本题,我们可以得到以下结论:

让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针 都是每次均走一步,最终肯定会在入口点的位置相遇

证明: 

环形链表 II_第2张图片

三、代码 

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

你可能感兴趣的:(链表,数据结构,java)