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

力扣-142.环形指针

142. 环形链表 II

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

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

不允许修改链表。

示例 1:

输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0输出:返回索引为 0 的链表节点解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1输出:返回 null解释:链表中没有环。

由题可知,我们需要找出链表中是否有环,若有,还要输出换环的位置。

首先考虑怎么判断有没有环。我们定义双指针,一个快一个慢,快的一次走两步,慢的一次走一步。如果没有环,那么快的指针走到 NULL 就结束了。但是有环的话快慢指针一定会在环中碰到,因为当慢指针进入环后,快指针每次比慢指针多走一步,可以用相对运动来类比,慢指针相当于静止,而快指针始终走一步,在环中快指针就绝对会追上慢指针。

接下来考虑怎么找出环的位置。可以简单画图理解一下,如图x=(快指针走的总圈数-1)+ (相遇点到环入口位置的距离)。 这里解释一下快指针走到的圈数为什么大于等于1,因为快指针只有等慢指针进入环后才能开始追慢指针,慢指针进入环比快指针慢,(即慢指针肯定在快指针后面),那么快指针想要追到慢指针至少绕环一周。还有一个可能考虑的问题是为什么快指针要加上n个环长度,而慢指针不用。因为慢指针只可能在绕环第一圈的时候就被快指针追上,如图二,慢指针走一圈的时候,快指针已经走两圈了,即快慢指针一定相遇过一次。

综上所述,可以再利用两个临时指针,一个指向 head 一个指向相遇点,当它们相遇时候即x=z+(n-1)个环周长时,此时head指向即环入口。

class Solution { public: ListNode *detectCycle(ListNode *head) { ListNode* fast=head; ListNode* slow=head; while(fast!=NULL && fast->next!=NULL){ fast=fast->next->next; slow=slow->next; if(slow==fast){ ListNode* index=fast; ListNode* index2=head; while(index!=index2){ index=index->next; index2=index2->next; } return index; } } return NULL; } };
http://www.jsqmd.com/news/668836/

相关文章:

  • Delphi 10.4.2 实战:手把手教你用FMXLinux在Ubuntu上跑通第一个GUI程序
  • 从kHz到EHz:揭秘频率单位阶梯的换算逻辑与工程应用场景
  • Django 后台导出数据功能的实现
  • Gemini出点问题-----解决
  • 手写一个最小 Starter:从 0 到能看懂
  • 考研复习Day 16 | 数据结构与算法 --树与二叉树(上)
  • AI Agent Harness Engineering 的部署架构:单体部署、分布式部署与混合云
  • 终极BT下载加速指南:每天更新的Tracker列表让你的下载速度翻倍
  • FastAPI 项目 PyInstaller 打包 exe 全踩坑根治教程(Windows 全电脑通用分发)
  • 企业云盘选型标准合同条款:数据归属/服务等级/SLA全解析
  • 探究分享从对话到执行:OpenTiny NEXT 如何重塑前端智能化开发范式
  • STM32 IAP升级踩坑实录:BootLoader跳转失败、向量表重置、Flash分区冲突,我是如何解决的?
  • ControlSizePyQt - PyQt 版本的统一尺寸和颜色管理系统
  • 网络工程师必看:H3C与华为认证体系的前世今生及备考选择指南
  • 淘一个二手铷原子钟并用起来的过程
  • 从卖不出去到月入15000,贵阳这两家公司凭什么让销售翻身? - 精选优质企业推荐官
  • 一文看懂推荐系统:排序09:Field-aware Factorization Machines (FFM) 的工业界冷思考:为何从FM到FFM的改进叫好不叫座?
  • uni-app怎么实现弹窗 uni-app自定义模态框遮罩层【代码】
  • ESP32上传图片到巴法云,除了HTTPClient,你还可以试试这个库
  • 频谱分析仪
  • Qt Quick项目实战:用KDDockWidgets 1.4.0为你的QML界面添加可拖拽停靠面板(附源码)
  • C语言学习日志
  • 学习分享数据结构对比
  • Spring Boot 自动装配原理(面试版 + 实战理解版)
  • 老年人扎堆学AI,背后藏着千亿级银发经济新蓝海
  • 别再让Quartus默认的1GHz时钟坑了你!手把手教你为FPGA点灯工程写SDC约束文件
  • 通风系统节能改造笔记:用PLC分段控制替代PID,稳定风压还省电(含现场数据对比)
  • 【2026年最新600套毕设项目分享】微信小程序的小说实体书商城(30106)
  • RKNN模型在RK3588上初始化失败?别慌,可能是你的虚拟环境和开发板版本对不上
  • AI开发-python-langchain框架(--pdf文件分页加载 )