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

链表中环的入口结点

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

import java.util.*;
/*
判断链表是否有环。 (如果有环,环没有null节点,因此快慢指针一定会相遇)


*/
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        // 先找到快慢指针相遇点
        ListNode fast = pHead;
        ListNode slow = pHead;

        //找到快慢指针相遇点
        ListNode meetNode = FindMeetPoint(fast, slow);

        //相遇点不为null说明相遇了,
        //快指针从头结点开始,慢指针从相遇点开始。
        if (meetNode != null) {
            fast = pHead;
            slow = meetNode;
            while (fast != slow) {
                fast = fast.next;
                slow = slow.next;
            }
            //再次相遇,找到入口节点,返回
            return slow;
        } else {
            return null;
        }
    }

    public ListNode FindMeetPoint(ListNode fast, ListNode slow) {
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                return slow;
            }

        }
        return null;

    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务