LeetCode 141.环形链表
目录1 题目概述2 题目解法3 证明原题链接环形链表1 题目概述给你一个链表的头节点 head 判断链表中是否有环。如果链表中有某个节点可以通过连续跟踪 next 指针再次到达则链表中存在环。如果链表中存在环 则返回 true 。 否则返回 false 。示例1在遍历此链表时指针会在 2 到 -4 的这段区域不断地循环遍历因此链表中存在环示例2在遍历此链表时指针不会循环遍历链表最终会停止因此链表中不存在环2 题目解法在解决这道题目时所采用的方法是快慢指针法在使用快慢指针时保证慢指针每次走一步快指针每次走两步最终快慢指针相遇就能说明链表中存在环。如果快指针为空或快指针的下个结点为空则不存在环。存在环不存在环偶数个结点时奇数个结点时代码如下boolhasCycle(structListNode*head){structListNode*slowhead;structListNode*fasthead;while(fastfast-next){slowslow-next;fastfast-next-next;if(slowfast)returntrue;}returnfalse;}3 证明为什么慢指针走一步快指针走两步的话有环时它们一定能相遇呢如果慢指针走一步快指针走三步四步行不行呢首先来说说为什么慢指针走一步快指针走两步的话有环时它们一定能相遇以下面的链表为例在 slow 指针逐渐接近环时fast 指针已经在环内走了一段时间最终 slow 指针进入环时呈现出来的形式是这样的此时fast 和 slow 的距离为 4继续移动 slow 和 fast此时fast 和 slow 的距离为 3继续移动此时fast 和 slow 的距离为 2继续移动此时fast 和 slow 的距离为 1继续移动此时fast 和 slow 的距离为 0于是我们可以发现在快指针一次走两步慢指针一次走一步的情况下快慢指针之间的距离会逐渐缩小每次缩小1直到最后距离差为0因此我们可以假设在 slow 指针刚进环时fast 和 slow 之间的距离为 N在 fast 和 slow 逐渐移动的过程中距离 N 会不断减 1变成 N-1N-2N-3 … 1 0当距离为 0 时fast 和 slow 即可相遇因此在快指针一次走两步慢指针一次走一步的情况下两指针一定可以相遇再来说说如果慢指针走一步快指针走三步四步能不能让它们相遇在这里以慢指针走一步快指针走三步为例仍然假设在 slow 指针刚进环时fast 和 slow 之间的距离为 N此时如果让快慢指针开始移动那么快慢指针之间的距离差会逐渐减少 2变成 N-2N-4N-6N-8 …如果N 是偶数则距离最终会变成 0如果N 是奇数则距离最终会 变成 -1距离是 0表示 slow 和 fast 相遇距离是 -1表示 slow 和 fast 刚好错过无法相遇在这个情况下需要再次遍历环假设环的长度为 C那么fast 与 slow 的距离就是 C-1在遍历的过程中C-1又会不断地减2C-1 为偶数时最终会变成 0最终会相遇C-1 为奇数时最终会变成 -1最终不会相遇根据前面的结论如果一直不相遇那么 N 是奇数C是偶数真的是这样吗如果环内的结点较少环外的结点较多则在慢指针刚进环时快指针很有可能已经走了很多圈因此我们可以假设链表的起始位置到环的第一个结点的距离为 L快慢指针的距离为 N环的长度为 C此时slow 走过的距离为 Lfast 走过的距离为 L (x * C) (C - N) (x为走过的环的个数)又因为 fast 的速度为 slow 的三倍则距离也为 slow 的三倍因此可以得到等式 3L L (x * C) (C - N)化简可得 2L (x 1) * C - N根据我们得到的结论如果一直不相遇那么 N 是奇数C 是偶数将这个条件代入式中会发现并不成立因为偶数 ≠ 偶数 - 奇数在这样的情况下N 和 C 的取值只有下面两种情况N 为奇数C 为奇数N 为偶数C 为偶数当 N 为奇数C 为奇数时C - 1为偶数最终距离会为0快慢指针第一次不会相遇遍历第二次肯定会相遇当 N 为偶数时快慢指针一定会相遇所以slow 走一步fast走三步四步甚至更多时仍然会相遇

相关新闻

Python装饰器深度解析:从核心原理到高级应用实战

Python装饰器深度解析:从核心原理到高级应用实战

1. 项目概述:为什么装饰器是Python开发者的必修课?如果你写过一段时间的Python,尤其是在接触Web框架(比如Flask、Django)或者一些测试框架时,一定见过那个神奇的“”符号。它看起来像语法糖,用起…

2026/8/25 18:03:11 阅读更多 →
为什么eslint-config-canonical每加一条规则就升major版本?深入解读其semver版本策略

为什么eslint-config-canonical每加一条规则就升major版本?深入解读其semver版本策略

为什么eslint-config-canonical每加一条规则就升major版本?深入解读其semver版本策略 【免费下载链接】eslint-config-canonical The most comprehensive ES code style guide. 项目地址: https://gitcode.com/gh_mirrors/es/eslint-config-canonical 你有没…

2026/8/25 18:03:11 阅读更多 →
如何加入Android开发者的播客社区:TheContext-Podcast的GitHub Issues讨论规则与实践

如何加入Android开发者的播客社区:TheContext-Podcast的GitHub Issues讨论规则与实践

如何加入Android开发者的播客社区:TheContext-Podcast的GitHub Issues讨论规则与实践 【免费下载链接】TheContext-Podcast Podcast about Android Development with Hannes Dorfmann, Artem Zinnatullin, Artur Dryomov and wonderful guests! 项目地址: https:/…

2026/8/25 18:03:11 阅读更多 →

最新新闻

从零部署Codex:构建AI智能体操作系统内核的实战指南

从零部署Codex:构建AI智能体操作系统内核的实战指南

如果你最近在关注AI智能体,可能会发现一个现象:很多文章都在讲概念、讲架构、讲未来,但当你真正想动手,让一个AI智能体去帮你操作一个真实应用——比如自动回复微信、自动处理邮件、自动填写网页表单时,却常常卡在第一…

2026/8/25 18:48:43 阅读更多 →
冒泡排序算法详解:原理、优化与面试技巧

冒泡排序算法详解:原理、优化与面试技巧

1. 冒泡排序的核心原理与面试价值冒泡排序作为最基础的排序算法之一,在技术面试中出现的频率远超实际工程应用。这背后有个有趣的悖论:越是简单的算法,面试官越喜欢考察候选人的理解深度。我第一次在面试中被要求手写冒泡排序时,只…

2026/8/25 18:48:43 阅读更多 →
东华大学考研复试机试:动态规划、图论与字符串处理实战

东华大学考研复试机试:动态规划、图论与字符串处理实战

1. 项目背景与核心价值作为一名计算机专业考研过来人,我深知东华大学复试机试环节的重要性。OJ(Online Judge)在线编程平台是检验考生算法能力和编码熟练度的关键战场,而"每日3题打卡"正是我去年备战期间总结出的高效训…

2026/8/25 18:48:42 阅读更多 →
Java简历双向推荐系统:高校就业智能匹配实践

Java简历双向推荐系统:高校就业智能匹配实践

1. 项目背景与核心价值高校毕业生就业信息管理一直是高校工作中的重点难点。传统模式下,学生海投简历效率低下,企业筛选成本高,校方难以精准掌握就业动态。这套基于Java的简历双向推荐系统,正是为了解决这些痛点而生。我在实际开发…

2026/8/25 18:48:42 阅读更多 →
五原县矫正牙哪家正规?专业指南帮你选对机构

五原县矫正牙哪家正规?专业指南帮你选对机构

引言随着生活水平的提高,越来越多的人开始关注牙齿健康与美观。牙齿矫正是一个长期且复杂的过程,选择一家正规、专业的口腔门诊尤为重要。在五原县,如何找到一家合适的矫正牙机构呢?本文将为你提供一份详细的指南。一、行业现状与…

2026/8/25 18:48:42 阅读更多 →
小米AI智能体框架Xiaomi miclaw封测结束:开发者如何提前准备与评估

小米AI智能体框架Xiaomi miclaw封测结束:开发者如何提前准备与评估

最近不少开发者都在讨论小米的“龙虾”项目——Xiaomi miclaw,这个听起来有些神秘的名字背后,究竟是一个怎样的工具?它和我们日常的开发工作有什么关系?更重要的是,官方宣布其将于9月21日结束封测,这意味着…

2026/8/25 18:47:42 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →