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

【Leetcode Top 100】142. 环形链表 II

问题背景

给定一个链表的头节点 h e a d head head,返回链表开始入环的第一个节点。 如果链表无环,则返回 n u l l null null
如果链表中有某个节点,可以通过连续跟踪 n e x t next next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 p o s pos pos 来表示链表尾连接到链表中的位置(索引从 0 0 0 开始)。如果 p o s pos pos − 1 -1 1,则在该链表中没有环。注意: p o s pos pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。

数据约束

  • 链表中节点的数目范围在范围 [ 0 , 1 0 4 ] [0, 10 ^ 4] [0,104]
  • − 1 0 5 ≤ N o d e . v a l ≤ 1 0 5 -10 ^ 5 \le Node.val \le 10 ^ 5 105Node.val105
  • p o s pos pos 的值为 − 1 -1 1 或者链表中的一个有效索引

解题过程

经典找入环节点,流程主要分为两个阶段:

  1. 定义快慢指针,用找环的方式让两个指针相遇。
  2. 复用快指针或者重新定义一个指针从头出发,与慢指针同时后移,两指针相遇的节点即为入环节点。

不复用快指针的情况下上述流程可以在一个循环里实现,时间复杂度是不变的。由于快慢指针相遇时最多完整地遍历一次链表,时间复杂度是 O ( N ) O(N) O(N) 量级的,需要常数级别的额外空间。

具体实现

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode detectCycle(ListNode head) {ListNode slow = head, fast = head, nextTurn = head;while(fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if(slow == fast) {while(slow != nextTurn) {slow = slow.next;nextTurn = nextTurn.next;}return slow;}}return null;}
}
http://www.lryc.cn/news/494372.html

相关文章:

  • 嵌入式Qt使用ffmpeg视频开发记录
  • iOS 17.4 Not Installed
  • CTF之WEB(sqlmap tamper 参数)
  • 多点DMALL启动招股:将在港交所上市,聚焦数字零售服务
  • 【c++篇】:解读Set和Map的封装原理--编程中的数据结构优化秘籍
  • ollama部署bge-m3,并实现与dify平台对接
  • 在并发情况下,Elasticsearch如果保证读写一致?
  • AMD的AI芯片Instinct系列介绍
  • 【知识科普】设计模式之-责任链模式
  • fiddler安卓雷电模拟器配置踩坑篇
  • 机器学习5-多元线性回归
  • Linux kernel 堆溢出利用方法(三)
  • 对于GC方面,在使用Elasticsearch时要注意什么?
  • Xilinx PCIe高速接口入门实战(一)
  • Flume 监控配置和实践
  • 深度学习基础1
  • 《FPGA开发工具》专栏目录
  • 李春葆《数据结构》-查找-课后习题代码题
  • 【Git】:分支管理
  • C、C++ 和 Java的区别
  • 【Python-Open3D学习笔记】005Mesh相关方法
  • js原型、原型链和继承
  • 团队自创【国王的魔镜-2】
  • c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
  • 【Jenkins】docker 部署 Jenkins 踩坑笔记
  • Unreal Engine使用Groom 打包后报错
  • 嵌入式QT学习第3天:UI设计器的简单使用
  • 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  • 图论入门编程
  • 在Java中使用Apache POI导入导出Excel(三)