新闻详情

新闻详情

首页 / 资讯中心 / 详情

C语言数据结构:环形链表要点

发布时间:2026/10/1 9:28:49来源:尧图网络
C语言数据结构:环形链表要点
C语言数据结构环形链表要点环形链表题目解析环形链表II题目解析要点问题一一定能相遇吗问题二如果fast走其他步能追上吗问题三如何找到环的第一个节点环形链表题目环型链表解析分析可知环有大有小判断是否有环的办法使用快慢指针快指针走两步慢指针走一步当快慢指针相遇时说明链表有环得到程序代码typedefstructListNodeListNode;boolhasCycle(structListNode*head){ListNode*fast,*slow;fastslowhead;while(fastfast-next){slowslow-next;fastfast-next-next;if(fastslow)returntrue;}returnfalse;}环形链表II题目环形链表II题目要求返回环的第一个节点无环返回NULL解析两个步骤1. 判断是否有环 2. 有环返回环的第一个节点对于步骤1前面已经解答对于步骤2解析如下快慢指针第一次相遇的节点为meet一个指针从链表的头节点head开始走一个指针从meet节点开始走两个指针相遇处就是环的入口处稍后证明得到本题代码// 1. 判断是否存在环 2. 返回环的入口节点typedefstructListNodeListNode;structListNode*detectCycle(structListNode*head){// 1. 快慢指针判断是否存在环// fast 2*slowListNode*fast,*slow;fastslowhead;while(fastfast-next){slowslow-next;fastfast-next-next;// 快慢指针相遇, 存在环if(slowfast){// 2. 返回环的入口节点ListNode*meetslow;ListNode*pcurhead;while(meet!pcur){meetmeet-next;pcurpcur-next;}returnmeet;}}// 快指针访问到NULL,不存在环returnNULL;}要点在一定有环存在的情况下存在两个疑问为什么两个指针一定会相遇有没有可能会错过永远追不上请证明如果fast改为一次走 3 / 4 / 5 …… n 步还一定能追上吗为什么请证明问题一一定能相遇吗为什么一定会相遇有没有可能会错过永远追不上为什么请证明假设 slow 刚进环时 fast 与 slow 之间的距离为 Nfast 每次走两步slow 每次走一步每追击一次fast 与 slow 之间的距离就缩短 1fast 与 slow 之间的距离变化为 N N - 1 N - 2 N - 3 …… 2 1 0当 fast 与 slow 之间的距离为 0 时就是追上了问题二如果fast走其他步能追上吗如果 slow 走一步fast 走 3 / 4 / 5 ……n 步还一定能追上吗请证明此处只证明 fast 走 3 步时其余方法一致假设slow进入环中时fast与slow的距离为N环的周长为C从链表头节点phead开始到环节点的距离为Lfast 与 slow 之间的距离变化为 N为偶数 N为奇数 N N N - 2 N - 2 N - 4 N - 4 N - 6 N - 6 …… …… 4 3 2 1 0 -1当fast与slow之间的距离为0时表示追上了当fast与slow之间的距离为-1时表明错过了开始新的一轮追击此时fast与slow之间的距离为C-1此时fast与slow之间的距离为C-1 fast与slow之间的距离变化如下 C为奇数 C为偶数 C - 1 C - 1 C - 3 C - 3 C - 5 C - 5 …… …… 4 3 2 1 0 -1当fast与slow之间的距离为0时表示追上了当fast与slow之间的距离为-1时表明错过了开始重复追击此时fast与slow之间的距离为C-1将循环追击永远追不上总结当 N 为偶数时第一轮追击就追上了当 N 为奇数时第一轮追击会错过fast 与 slow 之间的距离变成 C - 1如果 C - 1 为偶数第二轮追上如果 C - 1 为奇数永远追不上如果同时存在 N 为奇数 且 C 为偶数那么就永远追不上问存在这种情况吗slow 进入环中时fast 与 slow 的距离为 N环的周长为 C从链表头节点 phead 开始到环节点的距离为 L假设 slow 进环时fast 已经在环内转了 x 圈slow 进环时 slow 走的距离L fast 走的距离 Lx*CC-N 已知fast 走的距离时 slow 的三倍 3L Lx*CC-N 化简得2L (x1)*C-N已知永远追不上的条件为1. N 为奇数 2. C 为偶数所以代入 2L (x1)*C-N 中得偶数 (x1)*偶数 - 奇数 偶数*任何数都是偶数 偶数-奇数 奇数 再次化简为偶数 偶数 - 奇数所以等式两边不相等N 为奇数和 C 为偶数的情况不能同时存在永远追不上的情况不存在N 是奇数时C 为奇数N 是偶数时C 为偶数结论一定追得上N 为偶数时第一轮就追上了N 为奇数时第二轮才能追上(第一轮错过开始第二轮追击第二轮追击距离为C-1C-1为偶数第二轮追上)问题三如何找到环的第一个节点一个指针从链表头节点phead处开始走一个指针从快慢指针第一次相遇的节点meet开始走两个指针相遇的节点为什么就是环的入口点处请证明假设快慢指针相遇时从链表头节点到环的入口点的距离为 L环的周长为 C快指针 fast 已经在环内转了 x 圈快慢指针相遇点到环的入口点的距离为 N注意 慢指针slow不可能在环中走超过1圈原因 慢指针入环时快慢指针之间只有环的初始距离当慢指针走满一圈时fast已经在环内走了两圈早就已经超过了初始距离注意快指针在环内转了 x 圈x 必然 ≥ 1即快指针至少在环内走了 1 圈原因慢指针进入环时快指针已经进入环了当快指针追上慢指针时最少要在环内走一圈slow 走的距离: L N fast 走的距离: L x*C N 已知: fast 2*slow 2*(L N) L x*C N 化简得: L x*C - N -- L (x - 1)*C C - N (x - 1)*C 即在环内转了 x-1 圈 C - N 正好是从 meet 节点到环的入口处的距离由此可得当从头节点phead开始走的指针走到环的入口处时从meet处开始走的指针正好绕道环的入口处
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

(LangGraph教程)2. State and Memory——Lesson 6:Chatbot聊天机器人消息总结与外部记忆(外部数据库)(未索引) 2026/10/1 10:16:45

(LangGraph教程)2. State and Memory——Lesson 6:Chatbot聊天机器人消息总结与外部记忆(外部数据库)(未索引)

https://academy.langchain.com/courses/intro-to-langgraph https://github.com/shangxiang0907/langchain-academy 文章目录Chatbot with message summarization & external DB memory 具备消息摘要与外部数据库记忆的聊天机器人Review 回顾Goals 目标SqlitePersisting …

阅读更多 →
2026 年版|同岗薪资差 1.5 倍!大数据人转大模型不用读研,4 个月可落地 2026/10/1 10:16:38

2026 年版|同岗薪资差 1.5 倍!大数据人转大模型不用读研,4 个月可落地

本文对比了大数据与大模型岗位的薪资差距,指出大模型岗位薪资普遍更高。文章强调大数据工程师转型大模型具有三大优势:数据处理能力、分布式计算经验及行业知识。为有意转型的读者提供了四步转型路径:补齐深度学习基础、掌握大模型微调技术、…

阅读更多 →
Python手写BP与CNN作业骨架:可调试、可验证、可批改 2026/10/1 10:16:38

Python手写BP与CNN作业骨架:可调试、可验证、可批改

简介:这是一套面向高校与自学AI初学者的Python作业辅助工具源码,聚焦深度学习、智能优化算法与搜索算法等核心AI方向,帮助学生高效完成课程实验、课程设计及项目实践。资源共56个文件,含10个Python源码(如BP、CNN、PSO…

阅读更多 →
SSM+微信小程序私教预约系统实战指南 2026/10/1 10:16:31

SSM+微信小程序私教预约系统实战指南

简介:本资源是一套面向计算机专业本科生的高分毕业设计实战项目,基于SSM框架与微信小程序构建健身房私教预约系统,解决中小型健身场馆线上预约、教练排班、会员管理等核心业务需求,亦适合作为Java Web开发与小程序全栈课程设计参考…

阅读更多 →
PUBG‑Ally:具备对话能力的具身游戏AI队友智能体 2026/10/1 10:16:31

PUBG‑Ally:具备对话能力的具身游戏AI队友智能体

PUBG‑Ally:具备对话能力的具身游戏AI队友智能体 arXiv编号:arXiv:2609.29837v1 摘要 本文介绍PUBG‑Ally(简称Ally),部署在《绝地求生》中的语音交互具身智能体,它可以自主推理、执行游戏动作,作为AI队友和真人玩家并肩作战。开发该AI队友需要同时攻克两大难点:严格延…

阅读更多 →
小白程序员必看:企业如何正确使用AI,让AI成为你的得力助手 2026/10/1 10:16:24

小白程序员必看:企业如何正确使用AI,让AI成为你的得力助手

本文探讨了企业在应用AI时常见的误区,强调AI不应仅仅被视为工具,而应被当作员工来使用。文章指出,AI落地需要明确的岗位、目标、知识、权限和流程,并强调管理者需要学会如何带领AI,建立一套AI用工体系,从而…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉