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

LeetCode 141 题:环形链表判断的两种解法

环形链表判断是链表操作中的经典问题。哈希表法直观易懂但占用 O(n) 空间;快慢指针法利用龟兔赛跑思想,仅需 O(1) 空间且时间复杂度为 O(n)。掌握这两种方法有助于解决复杂链表问题。

樱花落尽发布于 2026/3/27更新于 2026/7/3039 浏览
LeetCode 141 题:环形链表判断的两种解法

环形链表判断

在计算机科学中,链表是一种基础数据结构。正常链表以空指针结尾,而环形链表的某个节点指向已存在的节点,形成循环。

解法一:哈希表法

解题思路

记录经过的节点,若遇到重复则存在环。

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)需存储所有访问过的节点

解法二:快慢指针法

解题思路

受龟兔赛跑启发,两个指针以不同速度遍历。若存在环,快指针终将追上慢指针。

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. 解法一:哈希表法
  3. 解法二:快慢指针法
  4. 代码实现与调试心得
  5. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Django+Vue3 前后端分离 Web 视觉系统:集成 YOLO 与 LLM 大模型智能分析
  • Web 前端基础入门:HTML、CSS 与 JavaScript 核心概览
  • 算法刷题:替换所有问号与提莫攻击(模拟)
  • FLUX.1-dev FP8 量化模型部署与优化指南
  • C++ Boost 库介绍与配置
  • C 语言排序算法详解:插入排序与希尔排序
  • AI 领域今日动态:GR00T N2、Claude Code 与具身智能标准落地
  • 网络安全工程师就业前景分析与零基础入门指南
  • 使用 Trae IDE 结合 Figma MCP 实现设计稿转前端代码实战
  • C/C++ 动态规划实战:多状态 DP 详解(打家劫舍与股票买卖)
  • Tomcat 安装、环境配置及 IDEA/Eclipse 集成指南
  • C++ 核心过渡:从 C 到 C++ 的入门指南(上)
  • Ubuntu 部署 OpenClaw 实战指南
  • Codex 代码生成模型简介
  • OpenClaw 跨平台 AI 助手完全使用指南:从入门到精通
  • agency-agents 深度解析:打造专属 AI 开发团队
  • 医疗 NLP 实践:基于 Llama-Factory 微调医学问答系统
  • 网站漏洞挖掘与渗透测试常见思路指南
  • 机器人正运动学与逆运动学基础
  • GitHub 开源项目日报:多模态 AI 代理栈与记忆框架

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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