

LeetCode Hot 100:环形链表
力扣第 141 题「环形链表」要求判断单链表中是否存在环:如果沿着
next 指针能再次到达某个节点,就返回 true,否则返回 false。题目中的 pos 只用于描述尾节点回连的位置,不会传入函数;节点数最多为 10^4,进阶要求使用常量内存。1 这道题收录在 LeetCode 热题 100 的链表分组中。快慢指针把「是否访问过某个节点」改成「两个速度不同的指针是否会相遇」。
slow 每次走一步,fast 每次走两步。没有环时,fast 会先到达链表末尾;有环时,两者进入同一条闭合路径,fast 每轮会追近一个节点,最终与 slow 相遇。function hasCycle(head) {
let slow = head;
let fast = head;
while (fast !== null && fast.next !== null) {
slow = slow.next;
fast = fast.next.next;
if (slow === fast) {
return true;
}
}
return false;
}循环条件必须同时检查
fast 和 fast.next,否则 fast.next.next 可能访问空值。空链表、单节点无环链表都会自然退出循环。两个指针最多移动线性级别的步数,时间复杂度是 O(n);只使用两个指针,额外空间复杂度是 O(1)。References
- 1力扣 141. 环形链表
leetcode.cn
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.
