1、寻找快慢链表的相遇点
快链表步长为2,慢链表步长为1
ListNode fast=head;
ListNode slow=head;
ListNode meetNode=null;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
if (slow == fast) {
meetNode=slow;
break;
}
}如果没有相遇点则说明无环。
2、遍历链表,直到快慢链表再次相遇
ListNode fast1=head;
ListNode slow1=meetNode;
while (fast1 != slow1) {
fast1 = fast1.next;
slow1 = slow1.next;
}
return slow1;快链表起始点为head,慢链表起点为相遇点为meetNode。
双链表步长都为1,当双链表再次相遇即为环入口。
注:环入口节点并不是相遇点,但环链表一定有相遇点,因此判断环链表的因素就是链表是否有相遇点。

京公网安备 11010502036488号