牛客 NC3 链表中环的入口节点(快慢指针)

在这里插入图片描述
快慢指针找第一次相遇
相遇后慢指针回到起点
再每次快慢指针都走一步
再次相遇就是入口

    public ListNode detectCycle(ListNode head) {
    
    
        if(head == null || head.next == null) return null;
        ListNode p = head ,q = head;
        while(q != null && q.next != null){
    
    
            p = p.next;
            q = q.next.next;
            if(p == q) break;
        }
        if(q == null || q.next == null) return null;
        p = head;
        while(p != q){
    
    
            p = p.next;
            q = q.next;
        }
        return p;
    }

猜你喜欢

转载自blog.csdn.net/qq_43434328/article/details/115015699