news 2026/5/1 16:59:40

HWA_21leetcode142环形链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HWA_21leetcode142环形链表

题目

题解

# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = NoneclassSolution:defdetectCycle(self,head:Optional[ListNode])->Optional[ListNode]:# 1、通过快慢指针的⽅式,在环中寻找它们的第⼀次相遇的节点位置# 2、定义⼀个慢指针,每次只会向前移动 1 步slow=head# 3、定义⼀个快指针,每次只会向前移动 2 步fast=head# 4、如果链表有环,那么⽆论怎么移动,fast 指向的节点都是有值的whilefast!=Noneandfast.next!=None:#慢指针每次只会向前移动 1 步slow=slow.next# 快指针每次只会向前移动 2 步fast=fast.next.next# 快慢指针相遇,说明有环# x 代表从头节点到环形⼊⼝节点的节点数(不包含头节点)# y 代表从环形⼊⼝到第⼀次相遇节点的节点数(不包含环形⼊⼝节点)# z 代表从第⼀次相遇节点到环形⼊⼝的节点数(不包含第⼀次相遇节点)# y + z 代表环的节点总数# 此时,快指针⾛了 x + y + n y + z)# 其中,x + y 表示快指针第⼀次到达相遇节点,n 代表快指针在环⾥⾯绕了多少圈# 此时,慢指针⾛了 x + y 步# 由于快指针每次⾛ 2 步,所以快慢指针第⼀次相遇的时候出现⼀个等式# x + y = [x + y + n y + z)] / 2# 即 2 * x + y) = x + y + n y + z)# 即 x + y = n(y + z)# 即 x = n(y + z)- y# 我们的⽬的就是去求 x# 定义两个指针,⼀个指向相遇节点,定义为 b,⼀个指向链表头节点,定义为 a# b 在环中绕圈圈,⾛了 n(y + z)步会回到原处,即回到相遇节点处# 由于 y 代表从环形⼊⼝到第⼀次相遇节点的节点数(不包含环形⼊⼝节点)# 所以 n(y + z) - y 时,b 到达了环形⼊⼝节点位置# 由于 x 代表从头节点到环形⼊⼝节点的节点数(不包含头节点)# 所以 a ⾛了 x 步时,a 到达了环形⼊⼝节点位置# 当 x = n(y + z)- y 时,找到了环形⼊⼝节点位置# 5、开始寻找环⼊⼝ifslow==fast:# 定义两个指针,⼀个指向相遇节点,定义为 b,⼀个指向链表头节点,定义为 a# ⼀个指向相遇节点,定义为 bb=fast# ⼀个指向链表头节点,定义为 aa=head# 让 a 、b 两个指针向前移动,每次移动⼀步,直到相遇位置# 由于有环,必然相遇# 当 b ⾛了 n(y + z) - y 时,b 到达了环形⼊⼝节点位置# 当 a ⾛了 x 步时,a 到达了环形⼊⼝节点位置# a 与 b 相遇whilea!=b:# a 指针每次只会向前移动 1 步a=a.next# b 指针每次只会向前移动 1 步b=b.next# 6、返回 a 和 b 相遇的节点位置就是环形⼊⼝节点位置returna# 没有环,返回 NonereturnNone

图解


1通过快慢指针判断是否有环,快指针每次移动两步,慢指针每次移动一步
只要两个指针会相遇,那么这个链表必定有环
2如何寻找环的入口

第一个指针指向头节点
第二个指针指向快慢指针相遇的节点
这两个指针每次只移动一步,这两个指针相遇的节点就是入口

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 22:55:14

SQLite 常用函数

SQLite 常用函数 SQLite 是一款轻量级的关系型数据库管理系统,广泛应用于嵌入式系统和移动设备中。它以其小巧、高效、开源等特性赢得了广大开发者的青睐。SQLite 提供了丰富的函数来方便开发者进行数据处理和查询。以下是 SQLite 中一些常用的函数及其应用场景。 1. 字符串…

作者头像 李华
网站建设 2026/4/10 22:55:07

MusePublic Art Studio多场景落地:在线教育平台AI生成STEM学科知识可视化图

MusePublic Art Studio多场景落地:在线教育平台AI生成STEM学科知识可视化图 1. 项目背景与教育痛点 在线教育平台在STEM学科教学中面临着一个普遍难题:如何将抽象的科学概念、复杂的数学公式、精密的工程结构转化为学生容易理解的视觉内容。传统方法需…

作者头像 李华
网站建设 2026/4/10 22:53:09

内容解锁与免费访问:三种高效付费墙绕过技术方法解析

内容解锁与免费访问:三种高效付费墙绕过技术方法解析 在信息获取日益重要的今天,付费墙成为许多用户面临的主要障碍。通过本文,您将掌握三种不同技术原理的内容解锁方法,实现真正的免费访问体验。付费墙绕过技术不再复杂&#xff…

作者头像 李华
网站建设 2026/4/10 22:44:37

CRT-Royale终极指南:如何在ReShade中实现影院级CRT复古效果

CRT-Royale终极指南:如何在ReShade中实现影院级CRT复古效果 【免费下载链接】crt-royale-reshade A port of crt-royale from libretro to ReShade 项目地址: https://gitcode.com/gh_mirrors/cr/crt-royale-reshade 在数字时代追求复古CRT显示效果的游戏玩家…

作者头像 李华