题解 | #链表中环的入口结点#
链表中环的入口结点
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;
}
}


