news 2026/5/30 12:54:33

day135—快慢指针—环形链表Ⅱ(LeetCode-142)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day135—快慢指针—环形链表Ⅱ(LeetCode-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 <= 105
  • pos的值为-1或者链表中的一个有效索引

解决方案:

这段代码的核心功能是在单链表中找到环形结构的入口节点(若链表无环则返回nullptr),是判断链表环的进阶问题,依然采用「快慢指针」解法,结合数学推导定位环入口,时间复杂度O(n)、空间复杂度O(1),是该问题的最优解法。

核心逻辑

代码分两步完成:先通过快慢指针判断是否有环并找到相遇点,再利用数学规律定位环入口:

  1. 第一步:找快慢指针相遇点
    • 慢指针slow、快指针fast均从表头出发,慢指针每次走 1 步,快指针每次走 2 步;
    • 若链表有环,快慢指针必会在环内相遇;若快指针走到末尾(fastfast->next为空),说明无环,直接返回nullptr
  2. 第二步:定位环入口
    • 相遇后,将快指针fast重置到链表头节点,且快指针改为和慢指针同速(每次走 1 步);
    • 快慢指针继续同步移动,当二者再次相遇时,相遇节点就是环的入口节点,返回该节点即可。

总结

  1. 核心思路:利用「快慢指针相遇」证明有环,再通过「同速指针从头和相遇点出发必在环入口相遇」的数学规律定位入口;
  2. 关键规律:设表头到环入口距离为a,环入口到相遇点距离为b,环长为c,则相遇时快指针走的距离a + n(b+c) + b是慢指针a + b的 2 倍,推导得a = (n-1)c + (c - b),即表头到入口的距离等于相遇点绕环到入口的距离;
  3. 效率优势:全程仅用两个指针,无额外空间开销,时间复杂度O(n),是找环入口的最优解法。

函数源码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode* slow=head; ListNode* fast=head; while(fast && fast->next){ slow=slow->next; fast=fast->next->next; if(fast==slow){ fast=head;//重置位置和速度 while(slow!=fast){ fast=fast->next; slow=slow->next; } return slow; } } return nullptr; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 1:12:49

上海团队与华盛顿大学联手:AI实现医学图像精准识别突破

这项由上海医疗图像洞察&#xff08;Medical Image Insights&#xff09;团队的史鹏程、陈佳伟、刘佳琦、张星林&#xff0c;联合华盛顿大学的李雷、滑铁卢大学的陈涛以及西安交通大学的研究人员共同完成的重大研究&#xff0c;于2025年11月发表在arXiv预印本服务器上&#xff…

作者头像 李华
网站建设 2026/5/28 14:39:16

【Python小游戏】深度解析Pygame实现2048游戏的完整开发流程(有代码实现)

目录 第一章 游戏开发的前置准备与环境搭建 第二章 色彩系统与视觉设计的精妙之处 第三章 数据结构与游戏棋盘的状态管理 第四章 游戏逻辑核心&#xff1a;移动与合并算法的深度分析 第五章 游戏状态判定与结束条件的实现 第六章 用户交互与事件处理的完整流程 第七章 渲…

作者头像 李华
网站建设 2026/5/29 23:45:05

模组日志总体介绍

一、本文讨论的边界 本文是对合宙 4G 模组&#xff0c; 以及 4GGNSS 模组的日志功能的总体介绍。通过日志&#xff0c;可以对研发过程中&#xff0c;以及模组运行过程中的各种故障进行分析。二、4G 模组日志的几种类型 4G 模组的日志有两种类型&#xff1a; 业务日志和底层日…

作者头像 李华
网站建设 2026/5/30 1:52:11

一文搞定AI排名SEO的手段:从“反向提问”来优化AI排名

我们过去理解的谷歌排名&#xff0c;大致可以简化为一个公式&#xff1a; 谷歌理解用户的查询&#xff0c;理解你的网页内容&#xff0c;再结合一些外部信号&#xff08;比如外链&#xff09;&#xff0c;最后给出一个排名。 但在AI模式下&#xff0c;这个公式已经不够用了。…

作者头像 李华
网站建设 2026/5/28 14:39:22

高效筛选20w热点数据,从MySQL 2000w中精准提取

文章目录MySQL里有2000w数据&#xff0c;Redis中只存20w的数据&#xff0c;如何保证Redis中的数据都是热点数据&#xff1f;一、什么是热点数据&#xff1f;二、方法一&#xff1a;日志分析法1. 基本思路2. 实际操作3. 缺点三、方法二&#xff1a;实时统计法1. 基本思路2. 实际…

作者头像 李华
网站建设 2026/5/28 14:39:23

拥有AI员工,才发现误会了领导

人工智能爆火三年&#xff0c;大模型和AI工具好用之后&#xff1a;职场从个人单刷模式&#xff0c;转变成带几个AI助手打团战&#xff0c;可以更高效的干活&#xff0c;但节奏却慢不下来。打工人成领导&#xff0c;不知薪水涨多少&#xff1f;虽说只是几个AI助手&#xff0c;但…

作者头像 李华