首页 > 其他分享 >链表带环问题简单讲解

链表带环问题简单讲解

时间:2024-07-20 11:26:28浏览次数:12  
标签:当快 sub 相遇 距离 链表 讲解 速度 带环 指针

  #带环链表

解题思路

对于这道题我们可以定义两个指针,一个快指针,一个慢指针。

快指针一次走两步,慢指针一次走一步。这样快指针就会比慢指针先进入环内。

慢指针进入环后,这个问题就会演变成一个追击问题,即:快指针能否追上慢指针并与之重合。

假设,慢指针进入环后与快指针的距离为N。因为快指针速度为2,慢指针速度为1,所以两个指针每走一次都会使N-1,当N=0时,快指针与慢指针相遇。

因为两指针每次移动缩减的距离为1,N势必会等于0,而且不存在快指针越过慢指针的情况。所以快指针一定会与慢指针相遇。

数学扩展

如果快指针每次走三步、四步、五步,那存不存在快指针每次都会越过慢指针,从而使两者永远无法相遇的情况?

慢指针进入到环以后,快慢指针距离为N,两指针的速度差为sub,环的周长为C

因为两指针的运动是相对的,我们可以把慢指针视为不动,快指针以sub的速度在动

当快指针未超过慢指针就与其相遇时,快指针走的距离为N,两指针的距离为N

当快指针超过慢指针走了一个完整圆环再与慢指针相遇时,快指针走的距离为N+C,两指针的距离相当于N+C

以此类推:

当快指针超过慢指针走了K个完整圆环再与慢指针相遇时,快指针走的距离为N+K*C,两指针的距离相当于N+K*C

当两指针间的距离能被sub整除时,说明两指针能相遇。

于是得出两指针相遇的公式:(N+K*C)%sub==0

#求环接入点

解题思路

我们创建两个指针,快指针速度为2,慢指针速度为1。

慢指针进入环时走的距离为X,快指针走的距离为2X。
 

在环中,当快指针与慢指针相遇时,快指针走的距离为2t,慢指针走的距离为t。

我们可以发现N+t=2t     由此我们能得出:t=N

我们发现快指针走的总距离为2X+2N,慢指针走的距离为X+N。

也就是:快指针走的总距离=2*慢指针走的总距离

那快指针再环里走了几圈呢?

不知道,我们设:快指针在环里走了K圈,环的周长为C。

快指针走的总距离又可以表达为:X+K*C+N

所以可得:快指针走的总距离=2*慢指针走的总距离

              ->   X+K*C+N=2*(X+N)

              ->  K*C-N=X

              ->  (K-1)*C+(C-N)=X         快指针在环中必转一圈(否则无法相遇),所以K>0。

C-N正好是指针1到环接入点的距离。

也就是说:两指针相遇后,让一个指针留在原地,另一个指针放到起始点,两个指针同时向后遍历链表(就是两指针速度为1),就可以得到环的接入点了。

标签:当快,sub,相遇,距离,链表,讲解,速度,带环,指针
From: https://blog.csdn.net/2401_83733103/article/details/140541868

相关文章

  • 135java jsp SSM连锁店经营会员管理系统(源码+文档+任务书+运行视频+讲解视频)
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 127java jsp SSM乡镇篮球队管理系统球队球员赛程管理(源码+文档+运行视频+讲解视频)
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 杨辉三角讲解
    一、背景(阅读时可略过)(1)杨辉其人杨辉,字谦光,杭州人,中国南宋时期杰出的数学家和数学教育家。他是世界上第一个排出丰富的纵横图和讨论其构成规律的数学家。著有《详解九章算法》、《日用算法》、《乘除通变本末》、《田亩比类乘除捷法》、《续古摘奇算法》。杨辉的数学研究与教......
  • Flood Fill(洪水算法)通俗讲解
    ......
  • 【视频讲解】PCA主成分分析原理及R语言2实例合集|附代码数据
    原文链接:https://tecdat.cn/?p=37034原文出处:拓端数据部落公众号 分析师:RuoyiXu在数据分析的浩瀚宇宙中,我们时常面对多变量的数据海洋。这些变量虽然信息丰富,却也给处理带来了巨大挑战:工作量激增,而关键信息却可能淹没在繁杂的数据之中。为了有效减少指标数量同时尽可能保留原......
  • 全网最详细保姆式讲解-汽车电子测试和认证标准科普解析(二)
    这些是汽车电子设备的常见电磁兼容性(EMC)和环境测试标准。以下是每个标准的简要说明:RE,CE(CISPR25,GB18655)RE(RadiatedEmission,辐射发射):测量设备辐射的电磁能量,防止其干扰其他电子设备。CE(ConductedEmission,传导发射):测量设备通过导线传导的电磁能量,防止其干扰......
  • [C++初阶]deque的讲解
    1.deque介绍          Deque是双端队列的不规则缩写。双端队列是具有动态大小的序列容器,可以在两端扩展或收缩。特定的库可能以不同的方式实现deque,通常是某种形式的动态数组。在任何情况下,它们都允许通过随机访问迭代器直接访问单个元素,并根据需要通过扩展和收缩......
  • 基于SpringBoot+Vue+uniapp的公考客观题复习系统的详细设计和实现(源码+lw+部署文档+
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 算法第十一天:leetcode707.设计链表
    一、设计链表的题目描述与链接  707.设计链表的链接如下表所示,您可直接复制下面网址进入力扣学习,在观看下面的内容之前一定要先做一遍哦,这样才能印象深刻!https://leetcode.cn/problems/design-linked-list/https://leetcode.cn/problems/design-linked-list/题目描述:你......
  • 【C语言】实现一个通讯录,一步一步详细讲解,小白也能看!!!
    目录设计思路代码实现 代码仓库 设计思路1.通讯录存放的信息这个通讯录保存的信息包括:名字,年龄,性别,电话,住址。2.通讯录的功能1.通讯录可以存放100个人的信息。2.增加联系人3.删除联系人4.修改联系人5.查询联系人6.显示所有人3.文件规划我们准......