Hot100:环形链表(Linked List Cycle)Floyd 快慢指针 ACERS 解析
副标题 / 摘要 判断链表是否有环,本质是“指针追及问题”。本文用 ACERS 结构讲透 Floyd 快慢指针判环:为什么一定能相遇、如何避免空指针、以及在工程里如何用同一思想识别循环引用/路由环路。 预计阅读时长:10~12 分钟 标签:Hot100、链表、快慢指针 SEO 关键词:Hot100, Linked List Cycle, 环形链表, 判环, Floyd, 快慢指针, LeetCode 141 元描述:Floyd 快慢指针 O(n)/O(1) 判断单链表是否有环,附替代方案对比、易错点与多语言实现。 目标读者 正在刷 Hot100 / 准备面试的同学 想把“链表双指针”沉淀成稳定模板的中级开发者 在工程里需要识别循环引用、链式结构异常的同学(C/C++/Go/Rust/JS 皆适用) 背景 / 动机 链表出现环在工程里并不罕见: 例如手写内存池的 free list、对象引用链、状态机/任务编排的 next 指针、配置链路的“下一跳”等。 一旦出现环: 遍历会进入死循环(CPU 占用飙高,日志刷爆) 资源释放/回收会卡死(例如释放链表节点时无限循环) 监控定位困难(看起来像“偶发卡死”,本质是结构性错误) 因此你需要一个不依赖额外内存、可在线检测的判环方法:Floyd 快慢指针就是这类问题的标准答案。 核心概念 环(Cycle):从某个节点开始,沿 next 指针走若干步能回到自己 pos(评测用):题目描述里的 pos 仅用于评测系统构造数据;你的函数不会收到 pos 参数 快慢指针(Floyd):慢指针每次走 1 步,快指针每次走 2 步;若存在环,二者必定在环内相遇 指针相等 vs 值相等:判环必须比较“节点身份”(引用/地址),不能只比 val(值可能重复) A — Algorithm(题目与算法) 题目还原 给你一个链表的头节点 head,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 ...