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

【LeetCode 142】环形链表 II:寻找环的入口

一、题目描述

给定一个链表的头节点 head,如果链表中存在环,返回环的 入口节点;否则返回 null

  • 环的入口节点:指链表中开始进入环的第一个节点。

  • 链表中节点数目范围 [0, 10^4],节点值在 [-10^5, 10^5]

二、思路分析

这道题是 141. 环形链表 的升级版。

  • 141 只需要判断是否有环。

  • 142 要求返回环的 入口节点

核心依然是 快慢指针(Floyd 判圈算法),但需要额外推理。

1. 快慢指针相遇点
  • 慢指针 slow 每次走一步。

  • 快指针 fast 每次走两步。

  • 若有环,它们一定会在环内某个节点相遇。


2. 数学推导:如何找到入口

设:

  • 链表头到环入口的长度为 x

  • 环入口到相遇点的长度为 y

  • 环剩余部分的长度为 z

那么:

  • 慢指针走过的路程:x + y

  • 快指针走过的路程:x + y + n(y+z),其中 n 表示快指针多绕的圈数。

因为快指针速度是慢指针的两倍:

2(x + y) = x + y + n(y+z)
整理得到
x = (n-1)(y+z) + z

含义是:

  • 从头节点走 x 步就能到入口。

  • 从相遇点再走 (n-1)(y+z) + z 步也能到入口。

所以,只要:

  • 一个指针从头开始走。

  • 一个指针从相遇点走。

  • 两者每次都走一步。

它们最终会在环的入口相遇!

三、代码实现

public class Solution {public ListNode detectCycle(ListNode head) {if (head == null || head.next == null) return null;ListNode slow = head, fast = head;// 判断是否有环while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if (slow == fast) { // 相遇,说明有环ListNode ptr = head;// 两个指针同步前进,必在入口相遇while (ptr != slow) {ptr = ptr.next;slow = slow.next;}return ptr;}}return null; // 无环}
}

http://www.dtcms.com/a/410373.html

相关文章:

  • 卷轴 缓冲绘制 超级玛丽demo5
  • 1.9 IP地址和Mac地址
  • C# WinForms的入门级画板实现
  • 云南网站建设方案简述营销型网站开发流程
  • 随时随地学算法:Hello-Algo与cpolar的远程学习方案
  • App 上架全流程指南,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 分发与 App Store 审核经验分享
  • 网站建设公司推荐常德网站开发服务
  • 全球知名的Java Web开发平台Vaadin上线慧都网
  • 【QT】高级主题
  • 详细对比web请求post和put的区别
  • dedecms 营销网站模板免费下载专业设计网址青岛网站开发
  • 正在招 | 2025.9 福建 IT 相关岗位招聘信息
  • 树莓派4B+ubuntu20.04:不插显示器能不能正常开机?
  • 开发大型网站的最主流语言上海seo网站优化_搜索引擎排名_优化型企业网站建设_锦鱼网络
  • 从远程控制到AI赋能:ToDesk如何重塑未来办公新生态?
  • Python爬虫进阶:突破反爬机制(UA伪装+代理池+验证码识别)
  • 华为发布开源超节点架构,以开放战略叩响AI算力生态变局
  • 从格伦的角度理解信息哲学
  • 网站建设分金手指专业三十WordPress 多用户数据
  • obsidian git操作及踩坑记录:ssh秘钥设置以及推送到多个远程仓库
  • 【Linux】网络部分——网络基础(Socket 编程预备)
  • 【音频】SIP服务器Yate搭建
  • 贵阳网站建设宏思锐达网站挂服务器后图片不显示
  • @tanstack/react-query:React 服务器状态管理与数据同步解决方案
  • RCNN系列边界框回归损失函数
  • 郑州专业网站制作建设python基础教程雪峰
  • Go基础:文件与文件夹操作详解
  • 鸿蒙:侧边栏显示与隐藏
  • 【开题答辩实录分享】以《基于爬虫的娱乐新闻采集系统设计与实现》为例进行答辩实录分享
  • BMAD方法论与自动化工具的协同演进:重塑Go语言微服务的技术债务