Hot100:环形链表 II(Linked List Cycle II)Floyd 判环 + 定位入环点 ACERS 解析
副标题 / 摘要 这题的价值在于把“判环”升级为“定位入环点”。最稳的工程化模板是 Floyd:先用快慢指针在环内相遇,再让一个指针回到头结点同步走,下一次相遇的位置就是入环点。全程不修改链表,O(n) 时间、O(1) 额外空间。 预计阅读时长:12~16 分钟 标签:Hot100、链表、快慢指针、Floyd SEO 关键词:环形链表 II, 入环点, Floyd 判圈, 快慢指针, O(1) 空间, LeetCode 142 元描述:Floyd 快慢指针判环并定位入环点:相遇后从头与相遇点同步前进,返回入环的第一个节点;O(n)/O(1),不允许修改链表。 目标读者 刷 Hot100,想把“判环/入环点定位”模板一次性吃透的学习者 需要写健壮链式结构遍历(避免死循环)并能定位故障节点的工程师 面试里被问到“为什么 reset 之后会在入环点相遇”的同学 背景 / 动机 链表一旦出现环,任何“遍历到 null 为止”的代码都可能进入死循环。 工程里造成环的原因很多:指针写错、复用节点、数据结构被破坏、并发读写导致 next 异常等。 因此除了“有没有环”,更重要的是: 环从哪里开始?(入环点) 找到入环点可以帮助你定位哪一个节点的 next 被错误地连回去了,这比单纯返回 true/false 更有诊断价值。 题目还明确要求:不允许修改链表,所以不能用“打标记/改值/断链”等手段。 核心概念 概念 含义 作用 环 沿 next 走能再次回到某节点 会导致遍历死循环 入环点 从头结点沿 next 首次进入环的那个节点 题目要求返回它 Floyd 判圈 快慢指针:slow 每次 1 步,fast 每次 2 步 O(1) 空间判环 相遇点 slow 与 fast 在环内第一次相遇的位置 用来进一步定位入环点 引用相等 判断是否为同一节点对象/地址 不能用值相等代替 A — Algorithm(题目与算法) 题目还原 给定链表头节点 head,返回链表开始入环的第一个节点;如果链表无环,返回 null。 ...