题解 | #链表中环的入口结点#

链表中环的入口结点

https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        //定义快慢指针,第一次相遇的时候走的差距就是环的大小,然后将f指针移到头节点再次进行遍历再次相遇的位置就是入口节点
    
        if(pHead==null){
            return null;
        }
        ListNode s = hasCycle(pHead);
        ListNode f = pHead;
        if(s==null){
            return null;//无环
        }
        while(f!=s){
            f = f.next;
            s = s.next;
        }
        return s;   
    }

    public ListNode hasCycle(ListNode head){
        ListNode f = head;
        ListNode s = head;

        while(f!=null && f.next!=null){
            f = f.next.next;
            s = s.next;
            if(s==f){
                return s;
            }
        }
        return null;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务