链表 —— 142 环形链表Ⅱ 难点拆解!快慢指针如何找到环入口?动图解原理!
力扣 142 环形链表Ⅱ给定一个链表的头节点head返回链表开始入环的第一个节点。如果链表无环则返回null。如果链表中有某个节点可以通过连续跟踪next指针再次到达则链表中存在环。 为了表示给定链表中的环评测系统内部使用整数pos来表示链表尾连接到链表中的位置索引从 0 开始。如果pos是-1则在该链表中没有环。注意pos不作为参数进行传递仅仅是为了标识链表的实际情况。不允许修改链表。示例 1输入head [3,2,0,-4], pos 1输出返回索引为 1 的链表节点解释链表中有一个环其尾部连接到第二个节点。示例 2输入head [1,2], pos 0输出返回索引为 0 的链表节点解释链表中有一个环其尾部连接到第一个节点。示例 3输入head [1], pos -1输出返回 null解释链表中没有环。提示链表中节点的数目范围在范围[0, 104]内-105 Node.val 105pos的值为-1或者链表中的一个有效索引这道题跟着逻辑走思路很清晰但实际上需要严谨证明和反复琢磨才能真正理解并独立解题主要解决两点判断链表是否成环如果有环那么环的入口在哪里一. 是否成环这里可以采用双指针分别定义快慢指针均从头节点出发其中fast每次移动两个节点而slow每次移动一个节点如果fast和slow在移动途中相遇说明该链表成环。为什么快慢指针相遇就说明成环因为是快指针先入环慢指针后入环如果fast指针和slow指针相遇的话一定是在环中相遇在环内相遇就说明肯定成环了。为什么有环一定会相遇本质上是因为两指针存在速度差在环内绕环移动时快指针一定会追上慢指针。这是因为fast走两步slow走一步对slow来说fast是一点一点接近它的所以两者一定会在环内某一节点处相遇。画一个环让fast在任意一个节点开始追赶slow会发现展开后都是下图这种情况此时按照定义fast往前走一次两步slow走一次一步两者就会在 3 处相遇。完整动画演示如下图二. 入口在哪里假设从头结点到入口节点的节点数为x入口节点到两指针相遇节点的节点数为y从相遇节点再到入口节点的节点数为z 如图所示slow指针走过的节点数为x yfast指针走过的节点数为x y n * (y z)其中n表示快指针追慢指针的过程中绕过的圈数。由于快指针一次走两个节点慢指针一次走一个故快指针走过的节点数是慢指针的2倍。也就是2 * (x y) x y n * (y z)两边消一个x y化简得x y n * (y z)。要找到是环形入口节点也就是x所以把x提出来放左边得x n * (y z) - y。右边提一个y z出来化简得x (y z) * (n - 1) z。化简到这一步不妨设环绕圈数n为1即可得x z。这也就是说从头结点和相遇节点同时出发一个指针两个指针每次只走一个节点 那么当这两个指针相遇时所在处就是环形入口的节点。那么**n如果大于1** 是什么情况呢其实这种情况和n为1的时候是一样的一样可以通过这个方法找到入口节点只不过index1指针在环里多转了(n-1)圈然后再遇到index2相遇点依然是环形的入口节点。至此我们完成了一开始提出的两个问题✅下面是完整力扣代码class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode* fast head; ListNode* slow head; while(fast ! nullptr fast-next ! nullptr) { slow slow-next; fast fast-next-next; if (slow fast) { ListNode* index1 fast; ListNode* index2 head; while (index1 ! index2) { index1 index1-next; index2 index2-next; } return index2; } } return nullptr; } };

相关新闻

AnimeGarden终极指南:一站式动漫资源聚合平台如何解决你的追番痛点

AnimeGarden终极指南:一站式动漫资源聚合平台如何解决你的追番痛点

AnimeGarden终极指南:一站式动漫资源聚合平台如何解决你的追番痛点 【免费下载链接】AnimeGarden 動漫花園 镜像站 | 动画 BT 资源聚合站 | 动画 BT 资源开放接口 项目地址: https://gitcode.com/gh_mirrors/an/AnimeGarden 你是否曾经为了寻找最新的动漫资源…

2026/8/2 18:22:30阅读更多 →
多模态RAG把检索变成图搜索 多跳推理稳了

多模态RAG把检索变成图搜索 多跳推理稳了

多模态检索增强生成有个老问题:单跳问题("这张图里有什么")检索一次就够了,一旦问题需要多跳推理("这张图对应的论文里,作者还引用了哪些相关工作的方法"),每一…

2026/8/2 18:22:30阅读更多 →
量化回测“资产凭空蒸发”?用 QuantDash + Pandas 优雅搞定多股停牌持仓市值对齐

量化回测“资产凭空蒸发”?用 QuantDash + Pandas 优雅搞定多股停牌持仓市值对齐

📌 摘要 / 快速解答 (Direct Answer) 解决免费接口因股票停牌丢弃日期导致账户总金额错乱的问题,最优雅的数学手段是构建**“日期-标的”收盘价矩阵**。使用 QuantDash 批量调取标准 K 线,配合 Pandas 的 pivot 函数转换数据维度,…

2026/8/2 18:20:30阅读更多 →
为什么选择BootNTRSelector?比原版BootNTR快在哪里?

为什么选择BootNTRSelector?比原版BootNTR快在哪里?

为什么选择BootNTRSelector?比原版BootNTR快在哪里? 【免费下载链接】BootNTR 项目地址: https://gitcode.com/gh_mirrors/bo/BootNTR BootNTRSelector是BootNTR的改良版本,它允许用户选择要加载的NTR版本,并且比常规Boot…

2026/8/2 19:43:02阅读更多 →
Unity资源逆向分析:AssetStudio核心原理与实战提取指南

Unity资源逆向分析:AssetStudio核心原理与实战提取指南

1. 项目概述:为什么你需要掌握AssetStudio?如果你是一名Unity开发者、技术美术、游戏爱好者,或者对游戏内容创作感兴趣,那么你很可能遇到过这样的场景:看到一个精美的Unity游戏,对其中的某个模型、一段音效…

2026/8/2 19:43:02阅读更多 →
如何将微信聊天记录转化为个人数字资产:WeChatMsg的完整解决方案

如何将微信聊天记录转化为个人数字资产:WeChatMsg的完整解决方案

如何将微信聊天记录转化为个人数字资产:WeChatMsg的完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendin…

2026/8/2 19:43:02阅读更多 →
多 Agent 协作系统瘫痪:协同状态机死锁与 DAG 拓扑自愈实践

多 Agent 协作系统瘫痪:协同状态机死锁与 DAG 拓扑自愈实践

多 Agent 协作系统瘫痪:协同状态机死锁与 DAG 拓扑自愈实践 1. 生产故障:Researcher 与 Writer 双 Agent 互等,系统陷入逻辑死锁 在我们的多 Agent 协作系统(Multi-Agent System)上线初期,遇到了极具代表性…

2026/8/2 19:43:02阅读更多 →
Tacview飞行数据分析工具:从入门到精通的完整指南

Tacview飞行数据分析工具:从入门到精通的完整指南

Tacview飞行数据分析工具:从入门到精通的完整指南 【免费下载链接】Tacview The Universal Flight Analysis Tool 项目地址: https://gitcode.com/gh_mirrors/ta/Tacview Tacview是一款专业的飞行数据分析工具,它能够帮助飞行爱好者和专业飞行员记…

2026/8/2 19:43:02阅读更多 →
OBS Studio色彩校正完全指南:5分钟打造电影级直播画面

OBS Studio色彩校正完全指南:5分钟打造电影级直播画面

OBS Studio色彩校正完全指南:5分钟打造电影级直播画面 【免费下载链接】obs-studio OBS Studio - Free and open source software for live streaming and screen recording 项目地址: https://gitcode.com/GitHub_Trending/ob/obs-studio 想让你的直播和视频…

2026/8/2 19:41:01阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →