LeetCode 分类刷题:141. 环形链表

题目

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false

解析

前置题目:LeetCode 分类刷题:876. 链表的中间结点

同样设置快慢指针

如果链表中存在环,那么慢指针到环的入口时,快指针肯定已经入环了。因为快指针走两步的时间慢指针走一步,所以相对速度为1,则快指针一定会遇到慢指针。

如果链表中不存在环,则快指针会先遍历完链表,指向空。

答案

javascript 复制代码
var hasCycle = function(head) {
    let slow = head, fast = head; // 乌龟和兔子同时从起点出发
    while (fast && fast.next) {
        slow = slow.next; // 乌龟走一步
        fast = fast.next.next; // 兔子走两步
        if (fast === slow) { // 兔子追上乌龟(套圈),说明有环
            return true;
        }
    }
    return false; // 访问到了链表末尾,无环
};

// 作者:灵茶山艾府
// 链接:https://leetcode.cn/problems/linked-list-cycle/solutions/1999269/mei-xiang-ming-bai-yi-ge-shi-pin-jiang-t-c4sw/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度分析

时间复杂度:O(n),其中 n 是链表的长度。

空间复杂度:O(1)

相关推荐
用户8471810541914 分钟前
LangChain中间件教程及DeepAgents应用
javascript·agent
橘和柠16 分钟前
知识图谱实战(一):数据采集与实体关系抽取(完整代码)
算法
huabuyu18 分钟前
INP 自动化归因与自愈:如何自动定位、修复并验证一次卡顿
前端·javascript
BreezeJiang25 分钟前
浏览器里的 DeepSeek 到底怎么跑起来?关键在 Worker、缓存和流式消息
javascript
Mem0rin28 分钟前
前缀和:中心下标与数组乘积
数据结构·算法
BreezeJiang29 分钟前
单例模式真正解决的不是“只能 new 一次”,而是统一资源入口
javascript
windliang29 分钟前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
小林ixn32 分钟前
WebGPU + Transformers.js:把 DeepSeek-R1 塞进浏览器,真香!
javascript·llm·gpu
xiaominlaopodaren32 分钟前
three.js地图数学基础(四):瓦片金字塔
javascript·gis·three.js
漂流瓶jz33 分钟前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva