public ListNode EntryNodeOfLoop(ListNode pHead) {
if(pHead == null) return null;
// 定义快慢指针
ListNode slow = pHead;
ListNode fast = pHead;
while(fast != null && fast.next != null){
// 快指针是满指针的两倍速度
fast = fast.next.next;
slow = slow.next;
// 记录快慢指针第一次相遇的结点
if(slow == fast) break;
}
// 若是快指针指向null,则不存在环
if(fast == null || fast.next == null) return null;
// 重新指向链表头部
fast = pHead;
// 与第一次相遇的结点相同速度出发,相遇结点为入口结点
while(fast != slow){
fast = fast.next;
slow = slow.next;
}
return fast;
}
链表环的入口和链表是否有环算法
最新推荐文章于 2023-08-29 09:25:23 发布
本文详细介绍了如何使用快慢指针法检测链表中是否存在环,并找到环的入口结点。通过设定快指针每次前进两步,慢指针一步,当两者相遇时确定存在环。然后从链表头节点开始,以相同速度移动快慢指针,再次相遇的点即为环的入口。这种方法简洁高效,适用于链表数据结构的问题解决。
摘要由CSDN通过智能技术生成