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

每日算法题 19---142.环形链表Ⅱ

引言

在这个系列里面也讲过一道环形链表题,那道题是判断一个链表是否是环形链表,而这道题是找出环形链表的入口

题目

142.环形链表Ⅱ

要求

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

示例

思路

在判断是否为环形链表时用到了快慢指针的原理,这道题依旧使用快慢指针先来判断是否为环形链表,判断是环形链表之后就来找入口,找入口的原理用到了数学知识:

假设链表有a+b个节点,链表头部到链表入口有 a 个节点链表环有 b 个节点,设快指针走了 f 步,慢指针走了 s 步,快指针走的是慢指针的两倍(快慢指针的速度比):f=2s;快指针比慢指针多走了 n 个环的长度(相遇的地方一定是链表环里的某个节点,因此多走了n个环的长度):f=s+nb;将这两个式子整合得到s=nb,这意味着从开始到相遇,快慢指针分别走了2n、n个链表环

上述相遇过程理解清楚后,我们就来构造第二次相遇,使相遇的地点刚好是链表环的入口:令fast指针重新指向链表的头节点,此时 f=0,s=nb,快慢指针现在同时向前走一步,当fast指针走了 a 步后,slow指针走了 a+nb步,此时两指针相遇,同时站在了链表环的入口处(为什么说一定是入口呢?因为走 a+nb 步 ,即先走 a 步到入口节点,之后每绕 1 圈环( b 步)都会再次到入口节点)

代码

/** * 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 fast=head; ListNode slow=head; while(true){ if(fast==null || fast.next==null){ return null; } fast=fast.next.next; slow=slow.next; if(fast==slow) break; } fast=head; while(slow!=fast){ slow=slow.next; fast=fast.next; } return fast; } }
http://www.jsqmd.com/news/556673/

相关文章:

  • Shell脚本一键部署Kubenetes(k8s)前置环境
  • 群晖DSM解锁ROOT权限与WinSCP高效管理全攻略
  • matlab程序, 脉冲波合成与提取,滑冲效应、方向性效应,自定义脉冲模型,提取脉冲波
  • Termux:X11的10个核心功能解析:触摸手势、键盘切换与多显示器支持
  • 提示工程智能推荐系统的资源调度与成本优化(架构师经验)
  • 如何让键盘听懂你的设备语言?设备条件判断打造智能多设备键盘映射方案
  • AgiBot World数据集实战:如何用百万级轨迹训练你的机器人策略(附避坑指南)
  • Windows下TDEngine 3.0.4.0保姆级安装教程(含常见错误排查)
  • 别再死记硬背了!用SelectIO IP核搞定FPGA高速接口,从Camera到DVI的实战配置指南
  • 51:L构建容器与Kubernetes安全:蓝队的容器防御
  • docker搭建typecho
  • 提示工程架构师:掌握分布式缓存策略的秘诀
  • CogVLM模型训练终极指南:从环境配置到微调实战完整教程
  • MoveCertificate终极指南:Android 7-15系统证书管理全解析
  • 从零开始:crAPI靶场环境搭建与实战通关指南
  • 漫画脸生成器部署指南:3步完成Linux系统环境搭建
  • 四旋翼无人机轨迹跟踪:预设性能控制、滑模控制与 PID 的探索之旅
  • liteparse 支持的文档格式
  • 预印本在线发表流程解析:从校稿到最终版本的完整指南
  • ESP32音频播放项目终极指南:从入门到实战打造专业级音乐播放器
  • 如何让Windows任务栏焕然一新?RoundedTB给你三个惊喜答案
  • 技术赋能B端拓客:号码核验行业的破局与价值重塑,氪迹科技法人股东号码筛选系统,阶梯式价格
  • 如何使用ProxyManager构建高效代理模式:从工厂到生成的完整指南
  • 车载服务器主板选购指南:ITX/MATX尺寸、12V供电与高性能CPU的完美平衡
  • 深入解析Spring AI与MilvusVectorStore的集成实践
  • 设计师福音:Z-Image-Turbo_UI界面实现草图到成品的快速转化
  • 3个实例掌握视觉理解:用Transformers构建工业级图像分类系统
  • 打破苹果与Windows的图片隔阂:让HEIC缩略图预览不再是难题
  • 技术赋能B端拓客:号码核验行业的革新与实践,氪迹科技法人号码核验系统,阶梯式价格
  • 从分立元件到一颗芯片:手把手拆解一个经典Buck电路,看PMIC如何‘偷走’PCB面积