题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/ 视频链接:https://www.bilibili.com/video/BV1if4y1d7ob
一、看到题目的第一想法
之前做过“反转链表”和“移除链表元素”,对快慢指针有了印象。看到“环形链表 II”,第一反应是“判断有环用快慢指针,找入口用数学公式”。但公式推导忘了,只记得结论:快慢指针相遇后,让一个指针从头走,另一个从相遇点走,再次相遇就是入口。为什么这样?脑子里只有模糊印象,感觉又要背公式了。
二、实现过程中遇到的困难
1. 边界条件处理:链表无环时,快指针会走到空,必须判断 fast != nullptr && fast->next != nullptr,否则直接返回 nullptr。这个判断之前写反转链表时没用过,一开始漏掉了。
2. 初次相遇后指针重置:相遇后要把其中一个指针挪回头节点,另一个留在原地,然后同步单步走。这个操作顺序容易乱,必须画图确认。
三、今日收获心得
· 快慢指针不仅能判环,还能精确定位入口:这是链表的经典数学应用,记住“两轮相遇法”比硬背公式更重要。
· 链表题和数组题的本质差异:数组靠下标随机访问,适合二分、双指针滑动窗口;链表靠指针跳跃,适合快慢指针、虚拟头节点。两者思维模式不同,不能混用。
我的代码: