【LeetCode】算法详解#15 ---环形链表II

1.题目描述        

        给定一个链表的头节点  head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

提示:

  • 链表中节点的数目范围在范围 [0, 104] 内
  • -105 <= Node.val <= 105
  • pos 的值为 -1 或者链表中的一个有效索引

2.解决思路

        这道题目相比上一道题目,要求有一些变化,现在我们需要返回链表入环的点。所以上一道题的解法不能够复用,因为我们并不知道他们在哪个位置相遇。

        为了完成这道题目,可以这样思考,因为首先要找到相遇点,所以不可避免我们还是要用到快慢指针,而解题的关键就是如何判断相遇点的位置关系。

        设链表中环外部分的长度为 a。slow 指针进入环后,又走了 b 的距离与 fast 相遇。此时,fast 指针已经走完了环的 n 圈,因此它走过的总距离为 a+n(b+c)+b=a+(n+1)b+nc。

,任意时刻,fast 指针走过的距离都为 slow 指针的 2 倍。因此,我们有

                                a+(n+1)b+nc=2(a+b)⟹a=c+(n−1)(b+c)
有了 a=c+(n−1)(b+c) 的等量关系,我们会发现:从相遇点到入环点的距离加上 n−1 圈的环长,恰好等于从链表头部到入环点的距离。

所以也就是:相遇点距离入环点的距离就等于头结点距离入环点的距离

3.步骤讲解

        1.因为快指针的存在,先判断链表长度,小于两个节点则返回null

        2.定义三个节点,同时指向头结点,其中pre用于最后一步找入环点位置,其余两个是快慢指针

        3.进行循环,条件是遍历不到空,也就是不为无环链表时进行循环。

        4.先让慢指针移动一步,然后判断快指针的下一个节点是否为空,为空返回null,反之快指针移动两个节点

        5.当快慢指针相遇时,进行第二步操作,经过上述分析,可知此时让指向头结点的pre指针与慢指针slow同时开始移动,他们相遇的位置就是入环点。返回pre即可

4.代码展示

class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}public ListNode hasCycle(ListNode head) {if (head == null || head.next == null){return null;}ListNode pre = head;ListNode slow = head;ListNode fast = head;while (fast != null){slow = slow.next;if (fast.next != null){fast = fast.next.next;} else {return null;}if (slow == fast){while (pre != slow){pre = pre.next;slow = slow.next;}return pre;}}return null;}

5.执行结果

在leetcode中测试用例平均耗时0ms

内存分布43.86MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/923501.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/923501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka面试精讲 Day 18:磁盘IO与网络优化

【Kafka面试精讲 Day 18】磁盘IO与网络优化 在“Kafka面试精讲”系列的第18天&#xff0c;我们聚焦于磁盘IO与网络优化。作为支撑百万级吞吐量的分布式消息系统&#xff0c;Kafka的高性能不仅依赖于优秀的架构设计&#xff0c;更离不开对底层资源——尤其是磁盘和网络——的极…

ActiveMQ RocketMQ RabbitMQ Kafka选型及应用场景

许多时候我们都将Kafka拿来跟常用的几个消息队列作比较&#xff0c;将 Kafka 加入对比使得选型更加全面和实际。但请注意Kafka并非完全适用消息中间件的所有场景。这四款消息中间件定位不同&#xff0c;选择取决于你的具体场景。消息队列选型核心定位一句话总结RabbitMQ&#x…

STM32初始化串口重定向后printf调试信息不输出的问题

STM32初始化串口重定向后调试信息不输出的问题 Author&#xff1a;明月清了个风Date&#xff1a; 2025/9/9PS&#xff1a;开发stm32F745的过程中发现printf有时候不打印信息&#xff0c;单独调试确定了串口初始化和重定向正确&#xff0c;但是在系统整体调试的时候虽然正确运行…

PCA9535ECDWR2G 微控制器MCU接口芯片 ON 电子元器件解析

一、PCA9535ECDWR2G ON 元器件解析1. 是什么电子元器件&#xff1f; PCA9535ECDWR2G 是安森美半导体&#xff08;ON Semiconductor&#xff09;生产的一款16位I/O扩展器。它属于接口芯片类别&#xff0c;具体功能是通过IC总线为微控制器&#xff08;MCU&#xff09;提供额外的通…

大模型中token与tokenizer的区别

TokenToken 的基本概念在大模型&#xff08;如GPT系列&#xff09;中&#xff0c;token是文本处理的最小单位。模型将输入的文本分割成token序列&#xff0c;每个token对应一个唯一的整数ID&#xff0c;用于模型的内部处理。例如&#xff0c;英文单词"apple"可能被编…

还在觉得剪辑太难?用对视频剪辑软件,让剪辑变得像拼图一样有趣

想制作出精彩的Vlog&#xff0c;拥有一款简单易用的视频编辑软件是关键的第一步。如果你曾因为觉得剪辑太复杂、技术门槛太高而望而却步&#xff0c;那么这篇文章就是为你准备的&#xff0c;因为借助今天简单易用的视频编辑软件&#xff0c;人人都能成为自己生活的导演。本文就…

【ZEGO即构开发者日报】微信公众号上线“智能回复”功能;2025年8月中国应用/游戏厂商出海收入Top30榜;土耳其宣布将封禁29款社交/社媒应用……

&#x1f4a1;开发者朋友们大家好&#xff0c;这里是 开发者日报&#xff01;欢迎查阅您的实时互动日报。本栏目实时聚焦、每日更新【AI】、【泛娱乐】、【语音交互】、【实时音视频】等领域热点&#xff0c;欢迎大家在评论区一起探讨&#xff01; &#x1f528;「产品技术」 …

前端WebSocket实时通信实现

在项目中使用WebSocket实现实时通信 WebSocket提供了一种在客户端和服务器之间建立持久连接的方式&#xff0c;可以实现实时数据交换。下面我将展示如何在前端项目中集成WebSocket功能。 设计思路 我将创建一个简单的聊天室界面来演示WebSocket的使用&#xff0c;包含以下功能&…

电磁流量计可靠品牌之选,基恩士提供多样化解决方案

引言在工业自动化领域&#xff0c;流量的精确计量是保障产品质量、优化成本和提升设备效率的关键一环。当面临“电磁流量计的可靠品牌”这一问题时&#xff0c;企业通常需要考量产品的耐用性、测量精度、维护成本以及系统集成能力。流量计在安装、维护和测量精度方面面临诸多挑…

NumPy数组与Python列表的赋值行为解析

在Python科学计算中&#xff0c;NumPy数组和Python原生列表是两种常用的数据结构。理解它们之间的赋值行为差异对于编写高效、正确的代码至关重要。本文将深入探讨NumPy数组赋值给Python变量的各种情况&#xff0c;揭示背后的内存机制和类型转换特性。 直接赋值行为分析 当我们…

中国制造难点在哪里?

最近生产一批板子&#xff0c;其中一个进口的连接器为什么能卖我们差不多一千多钱还没现货&#xff0c;有时候还禁售&#xff1b;规格书也就寥寥一页而已&#xff0c;外观看起来也淡淡无奇&#xff0c;身为制造业强国的我们为什么没人做呢&#xff1f;你们怎么看&#xff1f;#中…

python 读取大文件优化示例

核心方法逐行读取 - 最常用&#xff0c;内存占用O(1)分块读取 - 适合超大文件&#xff0c;可控制内存使用内存映射 - 高性能&#xff0c;虚拟内存映射缓冲读取 - 平衡性能和内存特殊场景处理CSV文件 - 使用pandas的chunksize参数JSON Lines - 逐行解析JSON对象文本分析 - 内存高…

VBA数据结构深度解析:字典对象与集合对象的性能终极对决

VBA数据结构大揭秘:Dictionary与Collection,谁才是性能王者? 某头部券商的风控系统曾遭遇"数据黑洞"危机:使用Collection处理10万条交易记录时,系统响应时间长达47秒,而改用Dictionary后仅需3.2秒——效率差距达14.7倍!这背后是VBA开发者普遍存在的认知盲区:…

【系统分析师】2025年上半年真题:论文及解题思路

更多内容请见: 备考系统分析师-专栏介绍和目录 文章目录 试题一:论信息系统运维管理技术与应用 试题二:论软件系统测试方法及应用 试题三:论信息系统开发方法及应用 试题四:论模型驱动分析方法及应用 试题一:论信息系统运维管理技术与应用 智能运维(AIOps)是以人工智能…

立创·庐山派K230CanMV开发板的进阶学习——颜色识别

学习目标&#xff1a;立创庐山派K230CanMV开发板的进阶学习——颜色识别学习内容&#xff1a;颜色识别 颜色识别 1. 本节介绍 &#x1f4dd; 学习内容&#xff1a;本节将学习基于颜色阈值的色块检测技术&#xff0c;通过定义特定颜色范围&#xff0c;从摄像头采集的图像中识别并…

【实时Linux实战系列】V4L2 采集零拷贝:DMA-BUF 在低延迟视频中的应用

在实时视频处理系统中&#xff0c;视频帧的高效传输和处理是确保系统低延迟和高吞吐量的关键。传统的视频采集和处理流程中&#xff0c;数据拷贝是一个常见的性能瓶颈&#xff0c;它不仅增加了处理延迟&#xff0c;还可能导致帧间抖动。为了克服这些问题&#xff0c;Linux 提供…

STM32精准控制水流

如何用STM32精准控制水的流量&#xff1f;一、系统组成框图------------- ------------ ----------- -------------| | | | | | | || 流量传感器 -----> STM32 ----->| 驱动电路 ----->…

吃透 Vue 样式穿透:从 scoped 原理到组件库样式修改实战

在 Vue 项目开发中&#xff0c;我们经常会引入 Element Plus、Vant、Ant Design等成熟组件库来提升开发效率。但即便组件库提供了基础样式配置&#xff0c;实际业务中仍需根据设计需求调整组件内部细节样式——这时候&#xff0c;「样式穿透」就成了必须掌握的技能。而要理解样…

记一次维修网桥经历

1.前言 前俩天突然下大雨了&#xff0c;大雨过后我也迎来断网时刻&#xff0c;经过简单排查发现是网络的网桥这条线路无法连通。 猜测1 可能是网线损坏&#xff0c;2 网桥损坏 2.拆解 经过测试网线设备后发现是网桥的问题&#xff0c;尝试reset发现无反应&#xff08;正常情况重…

OceanBase001-入门--里面有的概念不确定文章作为了解使用

目录资料来源特点支持和不支持的点名词概念租户资源池租户使用资源数据库表分区示例资料来源 B站视频 点击跳转 特点 分两个版本 企业版支持Oracle 和MySql 社区版本支持 MySql 这里视频这么讲解的。后续有没有社区版本什么样子不知道&#xff0c;请不要喷我 单节点部署 兼…