跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

LeetCode 141 环形链表判断:哈希表与快慢指针解法

环形链表检测是链表操作中的经典问题。主要提供两种解决方案:哈希表法和快慢指针法。哈希表法通过记录已访问节点判断是否存在环,时间复杂度 O(n),空间复杂度 O(n)。快慢指针法利用龟兔赛跑原理,快指针每次走两步,慢指针每次走一步,若相遇则存在环,时间复杂度 O(n),空间复杂度 O(1)。实际应用中推荐快慢指针法以节省内存。代码实现需注意边界条件处理,如空链表或单节点情况。掌握这两种方法有助于解决更复杂的链表问题。

Kubernet发布于 2026/3/15更新于 2026/6/1522 浏览
LeetCode 141 环形链表判断:哈希表与快慢指针解法

🌀 环形链表:当数据开始循环舞蹈

在计算机科学的世界里,链表是一种优雅而基础的数据结构。正常链表如同一条笔直的小路,从起点 (head) 出发,每个节点指向下一个节点,最终以空指针 (nullptr) 作为终点,标志着旅程的结束。

Head
Node1
Node2
Node3
nullptr

然而,环形链表则打破了这种线性规则,它更像是一个神秘的莫比乌斯环,没有真正的终点。链表的某个节点不再指向空,而是指向链表中已经存在的另一个节点,形成了一个无尽的循环。

Head
Node1
Node2
Node3
Node4

🔍 解法一:哈希表法 - 记忆的艺术

解题思路

想象你是一位侦探,正在追踪一个可能陷入循环的线索。你需要记录下每一个经过的节点,就像在犯罪地图上钉上标记。每当遇到新节点时,你都要检查这个地点是否曾经出现过。

bool hasCycle(ListNode *head) {
    unordered_set<ListNode*> visited;
    while(head != nullptr) {
        if(visited.count(head)) {
            return true; // 发现重复访问,存在环
        }
        visited.insert(head);
        head = head->next;
    }
    return false; // 正常到达终点,无环
}

性能分析

指标值说明
时间复杂度O(n)最坏情况需要遍历整个链表
空间复杂度O(n)需要存储所有访问过的节点

这种方法直观易懂,但需要额外的存储空间。哈希表的选择至关重要,它决定了查找效率。在 C++ 中,unordered_set 提供了平均 O(1) 的查找时间复杂度。

🏃‍♂️ 解法二:快慢指针法 - 龟兔赛跑的智慧

解题思路

受龟兔赛跑寓言的启发,我们让两个指针以不同速度遍历链表。如果存在环,快指针终将追上慢指针;如果不存在环,快指针会先到达终点。

指针移动

Head
Node1
Node2
Node3
Node4
slow
fast
bool hasCycle(ListNode *head) {
    if(head == nullptr || head->next == nullptr) {
        return false;
    }
    ListNode* slow = head;
    ListNode* fast = head->next;
    while(slow != fast) {
        if(fast == nullptr || fast->next == nullptr) {
            return false; // 快指针到达终点,无环
        }
        slow = slow->next; // 乌龟每次一步
        fast = fast->next->next; // 兔子每次两步
    }
    return true; // 相遇,存在环
}

性能优势

指标值说明
时间复杂度O(n)线性时间解决问题
空间复杂度O(1)仅需两个指针,常数空间

这种方法不需要额外存储空间,是空间最优解。它体现了计算机科学中常见的双指针技巧,广泛应用于链表相关问题。

💻 代码实现与调试心得

在力扣平台上实现时,有几个关键点需要注意:

  1. 边界条件处理:空链表或单节点链表直接返回 false
  2. 指针移动顺序:先移动指针再判断,避免错过相遇点
  3. 循环终止条件:快指针或其 next 为 null 时即可确定无环

调试过程中,我最初忽略了 fast->next 的判空,导致在偶数长度链表上报错。通过添加这个检查,代码变得更加健壮。

🌈 思维与实现的分离

在解决算法问题时,思维过程和具体实现是两个不同的层面:

  1. 思维层面:考虑问题本质,寻找规律和模式
  2. 实现层面:将思维转化为代码,处理边界条件和语言特性

优秀的程序员能够在这两个层面间自如切换,既能看到森林,也能处理每棵树。

🎯 总结

环形链表判断是链表操作中的经典问题,两种解法各有千秋:

  • 哈希表法:直观易懂,适合教学和理解问题本质
  • 快慢指针法:空间高效,体现了算法优化的智慧

 LeetCode 141 题:环形链表的艺术与科学

掌握这两种方法,不仅能解决 LeetCode 141 题,更能为处理更复杂的链表问题打下坚实基础。记住,在编程的世界里,有时候跑得快的兔子确实能教会我们很多!

目录

  1. 🌀 环形链表:当数据开始循环舞蹈
  2. 🔍 解法一:哈希表法 - 记忆的艺术
  3. 解题思路
  4. 性能分析
  5. 🏃‍♂️ 解法二:快慢指针法 - 龟兔赛跑的智慧
  6. 解题思路
  7. 性能优势
  8. 💻 代码实现与调试心得
  9. 🌈 思维与实现的分离
  10. 🎯 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 前端 AI Agent 进阶学习路线:从基础到智能体构建
  • Gemini 全能 QQ 机器人部署手册
  • 2026 年全球 AI 全景分析:中美对标与算力模型应用数据
  • AI 前端 Agent 学习路线图
  • Git 国内镜像源安装与加速配置全指南
  • GitHub 7 大 Claude Skills 开源项目:Skill Creator、Superpowers 与 Code Review 实战指南
  • 开源 RAG 知识库框架盘点:15 大主流方案对比与选型指南
  • macOS 本地部署 OpenClaw 智能体框架指南
  • Dify 前端样式修改与自定义 Docker 镜像构建指南
  • 基于 AI 大模型与 Playwright 的 Web UI 自动化测试实践
  • 前端开发必备的 3 个 AI 技能:UI 设计、工程实践与硬件优化
  • OpenMAIC:清华开源 AI 教学平台,一键生成互动课程
  • B 站直播弹幕场控机器人使用指南
  • GLM-4.7 与 MiniMax-M2.1 性能实测对比
  • VSCode 配置 Python 开发环境完整指南
  • Python 核心语法:函数定义与使用详解
  • 二级 Python 考试真题及参考代码解析
  • ComfyUI Web Viewer:实现图像生成的实时预览与协作
  • AIGC 浪潮下图文内容社区数据指标体系构建方法
  • AI-Goofish-Monitor:基于 AI 与 Playwright 的闲鱼商品智能监控工具

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online