当前位置: 首页 > news >正文

026环形链表II

环形链表II

题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/description/?envType=study-plan-v2&envId=top-100-liked

我的解答:

public ListNode detectCycle(ListNode head) { ListNode slow=head, fast=head; while(fast!=null&&fast.next!=null){ slow=slow.next; fast=fast.next.next; if(slow==fast){ break; } } if(fast==null||fast.next==null){ return null; } slow=head; while(slow!=fast){ slow=slow.next; fast=fast.next; } return slow; }

分析:代码的时间复杂度为O(n),空间复杂度为O(1)。解题思路是快慢指针都从链表起始位置出发,快指针一次走两步,慢指针一次走一步,若快慢指针相遇,则其中一个指针回到链表头节点,之后无论是快指针还是慢指针都每次走一步,最后相遇的地方就是环的第一个节点。

看了官方题解后的解答:

//方法一:哈希表 //时间复杂度:O(n) //空间复杂度:O(n) public ListNode detectCycle(ListNode head) { Set<ListNode> set = new HashSet<>(); ListNode cur=head; while(cur!=null){ if(!set.add(cur)){ return cur; } cur=cur.next; } return null; } //方法二:快慢指针 //时间复杂度:O(n) //空间复杂度:O(1) public ListNode detectCycle(ListNode head) { if(head==null){ return null; } ListNode slow=head, fast=head; while(fast!=null&&fast.next!=null){ slow=slow.next; fast=fast.next.next; if(slow==fast){ fast=head; while(fast!=slow){ slow=slow.next; fast=fast.next; } return slow; } } return null; }

分析:

​ 1、方法一采用哈希表。

​ 2、方法二采用Floyd 判圈算法(又称龟兔赛跑算法)。思路是快慢指针一开始都位于链表头节点,快指针一次走两步,慢指针一次走一步,当快慢指针相遇时,此时快慢指针到环入口的距离等于链表头节点到环入口的距离。具体证明过程如下:

​ 假设链表头节点到环入口的距离为a,快慢指针相遇时,慢指针在环内走过的距离为b,且此时慢指针与环入口的距离为c(即整个环的长度为b+c)。因为快指针追上慢指针一定走过了整数倍的环的圈数加上b,则快指针走过的距离为:

​ a+n(b+c)+b

​ 又因为快指针每次走两步,慢指针一次走一步,所以快指针走过的距离一定是慢指针的2倍,则有:

​ a+n(b+c)+b=2(a+b)

​ 即:

​ a=c+(n-1)(b+c)

​ 我们发现,从相遇点到入环点的距离加上 n−1 圈的环长,恰好等于从链表头部到入环点的距离。

总结

  • 本题主要掌握Floyd 判圈算法(又称龟兔赛跑算法)的证明过程。Floyd 判圈算法的最终结论为:快慢指针一开始都位于链表头节点,快指针一次走两步,慢指针一次走一步,当快慢指针相遇时,此时快慢指针到环入口的距离等于链表头节点到环入口的距离。
http://www.jsqmd.com/news/791362/

相关文章:

  • 网盘直链下载助手终极指南:一键获取8大主流网盘真实下载地址
  • 终极免费SQLite在线查看器:零安装、100%数据安全的浏览器解决方案
  • 部署与可视化系统:前端可视化升级:使用 Three.js 构建 3D 检测框交互界面,实时展示目标位姿
  • 南宁找家教如何避坑?从试听到付费,南宁家教总动员的4重保障 - 教育快讯速递
  • 实战:用Halcon的smallest_rectangle2快速搞定PCB板元件方向检测与筛选
  • 独立开发者如何借助 Taotoken 低成本验证 AI 产品创意
  • 5分钟创建你的专属桌面宠物:DyberPet框架终极指南
  • 南宁家教总动员为什么能开十几年?三个其他平台做不到的硬条件 - 教育快讯速递
  • 【气动学】蒙特卡洛算法三维导弹制导模拟【含Matlab源码 15431期】
  • 5分钟终极指南:如何用Steam成就管理器解锁和管理游戏成就
  • 【2026 AI大会VIP服务权威指南】:基于12家头部企业实测数据的准入成功率提升策略及3类被拒高频原因预警
  • Linux 设备唤醒后键盘无法使用
  • 从零到一:SQLite数据库与Navicat for SQLite的快速上手与实战配置指南
  • 如何用WPS-Zotero插件在Linux下高效写论文:跨平台学术写作终极指南
  • 专业的智能投放(Geo关键词投放)公司 - GrowthUME
  • Windows Defender终极控制指南:如何永久禁用Windows Defender的完整教程
  • 【稀缺首发】:2026奇点大会未公开议程中流出的AI原生成熟度评估模型(含企业自测打分表V2.1)
  • 【2026奇点大会机密资料首发】:为什么92%的AI推荐系统在冷启动阶段就已失败?
  • 从I2C到SMBus:嵌入式开发中系统管理总线的实战配置与避坑指南
  • 保姆级教程:用Python多进程+队列搞定海康/大华摄像头实时预览,告别卡顿延迟
  • 独立开发者如何借助Taotoken低成本实验多种大模型能力
  • 对比直接使用厂商API,通过Taotoken聚合调用在运维与成本上的优势
  • 【仅限首批200家认证企业】:SITS 2026文档生成系统内测版开放申请——含专属LLM微调沙箱、架构图自动生成模块及NIST SP 800-53附录G适配包
  • 视频去水印免费用什么工具?2026免费去水印工具推荐,在线软件实测对比
  • 为什么你的AI测试总在“伪自动化”?SITS 2026的3层认知跃迁:从用例驱动→意图驱动→反馈演化
  • 别再只会看图表了!Grafana 8大面板(Graph/Stat/Table等)的隐藏调试技巧与实战配置
  • 利用taotoken为内部知识库构建智能问答检索增强系统
  • 别让资产负债表失真!深入浅出解读SAP中AR/AP重分类的业务逻辑与核心配置
  • WaveTools终极指南:如何简单快速解锁《鸣潮》120帧性能飞跃
  • ESP32 Flash管理实战:5种高效擦除策略深度解析