链表找环:Floyd 判圈算法(LeetCode 141  142 )
在链表相关的算法题中「判断链表是否有环」以及「寻找入环点」是两道极其经典的题目。它们不仅考察了对指针的操作更蕴含了一个巧妙的数学原理——Floyd判圈算法龟兔赛跑算法。一、 LeetCode 141判断链表中是否有环题目链接题目要求给定一个链表判断链表中是否有环。1. 核心思想快慢指针龟兔赛跑如果在直线跑道上跑得快的人一定会先到达终点但如果是在环形跑道上跑得快的人最终一定会从背后追上套圈跑得慢的人。我们设定两个指针慢指针slow每次移动 1 步。快指针fast每次移动 2 步。2. 逻辑推演无环情况fast 指针会率先走到链表末尾nullptr此时循环结束返回 false。有环情况fast 指针进入环后会在环内不断循环。由于 fast 每次比 slow 多走 1 步两者的距离会不断缩小最终必定在环内某处相遇slow fast此时返回 true。3. 代码实现 (C)class Solution { public: bool hasCycle(ListNode *head) { if (head nullptr || head-next nullptr) return false; ListNode *slow head; ListNode *fast head; while (fast ! nullptr fast-next ! nullptr) { slow slow-next; // 慢指针走一步 fast fast-next-next; // 快指针走两步 if (slow fast) return true; // 相遇即有环 } return false; } };复杂度分析时间复杂度 O(N)空间复杂度 O(1)。二、 LeetCode 142寻找入环的第一个节点题目链接题目要求如果链表有环返回入环的第一个节点无环则返回 null。这道题在 141 的基础上增加了难度不仅要知道有没有环还要精准定位环的入口。这需要用到一段精妙的数学推导。1. 变量定义假设从头节点到入环点的距离为 a从入环点到快慢指针相遇点的距离为 b从相遇点再回到入环点的距离为 c。环的总长度为 b c。2. 数学证明为什么相遇后从头走和从相遇点走会碰头当快慢指针相遇时慢指针slow走过的路程a b快指针fast走过的路程a b n * (b c) n 为快指针在环内转的圈数n 1因为快指针的速度是慢指针的两倍所以相同时间内快指针走过的路程是慢指针的 2 倍2 * (a b) a b n * (b c)化简等式a b n * (b c) a n * (b c) - b a (n - 1) * (b c) c结论解读(n - 1) * (b c) 代表在环内转了 (n-1) 个整圈。这说明从头节点走到入环点的距离a等于从相遇点走到入环点的距离c加上转了若干整圈。3. 算法设计基于上述数学结论我们可以在快慢指针相遇后开启第二阶段让一个指针 ptr 重新回到头节点 head。让 ptr 和相遇点的 slow 指针同时出发每次各走 1 步。由于 a 的长度等同于 c加上整数圈这两个指针必定会在入环点相遇。4. 代码实现 (C)class Solution { public: ListNode *detectCycle(ListNode *head) { if (head nullptr || head-next nullptr) return nullptr; ListNode *slow head; ListNode *fast head; while (fast ! nullptr fast-next ! nullptr) { slow slow-next; fast fast-next-next; if (slow fast) { // 1. 找到相遇点 ListNode *ptr head; // 2. 指针回到头节点 // 3. 两指针同速前进相遇点即为入环点 while (ptr ! slow) { ptr ptr-next; slow slow-next; } return ptr; } } return nullptr; // 无环 } };复杂度分析时间复杂度 O(N)空间复杂度 O(1)。

相关新闻

工业AI质检大模型技术方案:小样本快速换线与边缘部署实战

工业AI质检大模型技术方案:小样本快速换线与边缘部署实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 1:26:28 阅读更多 →
从 push 到上线只差一条 Git 钩子:OpenShip CI/CD 全链路时序拆解

从 push 到上线只差一条 Git 钩子:OpenShip CI/CD 全链路时序拆解

从 push 到上线只差一条 Git 钩子:OpenShip CI/CD 全链路时序拆解 【免费下载链接】openship Self-hosted deployment platform 项目地址: https://gitcode.com/GitHub_Trending/ope/openship "推代码即上线"这个承诺,托管平台做了十几…

2026/10/11 1:26:28 阅读更多 →
sqlmap注入Drupal < 7.32 “Drupalgeddon“ SQL注入漏洞(CVE-2014-3704)

sqlmap注入Drupal < 7.32 “Drupalgeddon“ SQL注入漏洞(CVE-2014-3704)

一、复现教程 Drupal < 7.32 "Drupalgeddon" SQL注入漏洞&#xff08;CVE-2014-3704&#xff09; Drupal是一个使用PHP编写的免费开源的Web内容管理框架&#xff0c;在GNU通用公共许可证下分发。 在Drupal Core 7.32版本之前的7.x版本中&#xff0c;数据库抽象…

2026/10/11 1:26:28 阅读更多 →

最新新闻

Linux网络性能优化实战:从内核参数调整到tcpdump抓包排查

Linux网络性能优化实战:从内核参数调整到tcpdump抓包排查

某个深夜&#xff0c;线上接口的P99延迟从60ms一路冲到700ms&#xff0c;我第一时间就想做一轮Linux网络性能优化与监控&#xff0c;于是把网上那套内核参数调优脚本挨个灌进去&#xff0c;tcp_tw_reuse、tcp_max_syn_backlog全都改了。结果延迟没降&#xff0c;反而有机器连接…

2026/10/11 2:22:00 阅读更多 →
Spring Boot JDBC多数据源动态切换实战:配置、路由与避坑指南

Spring Boot JDBC多数据源动态切换实战:配置、路由与避坑指南

简介&#xff1a;实际项目中常会遇到一个应用连接多个数据库的场景。这份“springboot-jdbc-多数据源”资源正是一套基于Spring Boot与JdbcTemplate的双数据源示例工程&#xff0c;面向Java开发者和需要处理跨库读写的中级程序员&#xff0c;目的是清晰展示多套数据源的定义、装…

2026/10/11 2:22:00 阅读更多 →
脑肿瘤MRI数据集的下载与整理:从NIfTI到训练集

脑肿瘤MRI数据集的下载与整理:从NIfTI到训练集

简介&#xff1a;面向医学影像与深度学习研究者&#xff0c;提供脑肿瘤MRI分类与分割两套配套数据。分类部分涵盖神经胶质瘤、脑膜瘤、垂体瘤及无肿瘤四种标签&#xff0c;便于训练图像分类模型&#xff1b;分割部分补充了肿瘤区域坐标标注&#xff0c;可支持语义分割与目标检测…

2026/10/11 2:22:00 阅读更多 →
阳光穿透树叶的丁达尔光斑动效:纯 CSS 径向渐变与混合模式叠加实战

阳光穿透树叶的丁达尔光斑动效:纯 CSS 径向渐变与混合模式叠加实战

在日语中&#xff0c;有一个极其唯美的专有词汇叫作“木漏れ日&#xff08;Komorebi&#xff09;”&#xff0c;专门用来指代“阳光穿透树叶的缝隙&#xff0c;在地面与墙面上洒下的摇曳光斑与丁达尔光柱”。 每当秋日微风拂过银杏树冠&#xff0c;金黄的枝叶随风轻轻晃动&…

2026/10/11 2:22:00 阅读更多 →
高校软件正版化落地指南:Navicat教育授权采购、部署与台账管理

高校软件正版化落地指南:Navicat教育授权采购、部署与台账管理

一说起校园里的软件正版化&#xff0c;很多人第一反应是“采购部门的事&#xff0c;跟我们搞技术的关系不大”。但这两年我在实际接触高校信息中心、计算机学院和科研团队的过程中&#xff0c;能明显感觉到一个变化&#xff1a;软件正版化已经不再是一张写在文件里的口号&#…

2026/10/11 2:22:00 阅读更多 →
FM020协议转换模块:实现PROFIBUS-DP与Modbus无缝对接

FM020协议转换模块:实现PROFIBUS-DP与Modbus无缝对接

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 2:20:59 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →