一、今日题目:142. 环形链表 II
今日任务: 142. 环形链表 II 总结链表与数组的适用场景差异,提交第一周学习小结 题意: 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。
说明:不允许修改给定的链表。 题目链接: https://leetcode.cn/problems/linked-list-cycle-ii/
视频链接: https://www.bilibili.com/video/BV1if4y1d7ob
二、解题思路:快慢指针法
这是解决链表环问题的最优解法,时间复杂度O(n),空间复杂度O(1),分为两步:
1. 判断有环+找相遇点初始化快指针fast(每次走2步)、慢指针slow(每次走1步),均指向头节点。 快指针先到末尾,说明无环;两指针在环内相遇,说明有环。
2. 找入环的第一个节点,相遇后,将快指针移回表头,快慢指针均每次走1步, 再次相遇的节点,就是入环的第一个节点。
三、代码实现
四、 常见易错点
1. 链表操作容易丢指针、成环,一定要一步步推演节点走向。
2. 边界条件容易忽略:空链表、单个节点、无环场景。
3. 二分法的区间规则不熟练,容易陷入死循环。