环形链表——快慢指针

环形链表之快慢指针 对于环形链表,通过快慢指针,如果存在环,这这两个指针一定会相遇,这是一种经典的判断环或是应用于环问题的思想。 阅读详情

给你一个链表的头节点 head ,判断链表中是否有环。

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

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

示例 1:

输入:head = [3,2,0,-4], pos = 1

输出:true

解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0

输出:true

解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1

输出:false

解释:链表中没有环。

提示:

链表中节点的数目范围是 [0, 104]

-105 <= Node.val <= 105

pos 为 -1 或者链表中的一个 有效索引 。

思路:

快慢指针能够很快的解决这个,一个走前面一个走后面,如果两个最后相遇即有环,否则无环。

代码:

bool hasCycle(struct ListNode *head) {
    if(head==NULL||head->next==NULL)
    {
        return false;
    }
    struct ListNode* one=head;
    struct ListNode* two=head->next;
    while(one!=two)
    {
        if(two==NULL||two->next==NULL)
        {
            return false;
        }
        one=head->next;
        two=two->next->next;
    }
    return true;
}

141. 环形链表——快慢指针问题 1),的情况相对速度是y,对于任意的初始相对距离N,N/y是未必整除的,不整除就意味着快指针从慢指针身上跳过,但没有相遇。并且沿着循环圈,开始新的一轮追逐,这次初始相对距离可能与上次不同,这里设为N1,如果N1/y任然不整除,那么就再次擦身而过。都不能整除y,那么就永远也值不上了,懂了吧?(N,N1,N2,N3这些距离可能会出现循环)而快慢指针进入循环刚开始开始追逐时,相对距离是N,根据高中物理经过N/1的时间,快慢指针一定会相遇!对于这个问题我们用相对速度来解释,首先快指针是慢指针的两倍。 阅读详情

相关推荐

142. 环形链表 II——哈希表、快慢指针(js)

完全一样,最后找到节点的时候返回这个节点而不是返回true。并不是环形链表的交点,而我们的任务是找交点。这边有个容易想不通的,快指针和慢指针的。

weixin_51745081的博客 878

快慢指针法判断链表是否有环

也可以在快指针和慢指针相等时break跳出循环,然后判断快指针和快指针的next是不是都不为null,若是说明有环,返回true;否则说明无环,返回false。每次移动后判断快指针和慢指针是否相等,若相等且不为null,则说明有环,返回true。若循环结束,说明没有环,返回false。快慢指针的初始值均设为head,每次移动慢指针一步,移动快指针两步。,两个指针一起移动,每次都移动一步。两个指针相遇的点就是入环点。循环的条件为快指针不为null且快指针的next不为null。

qq_46130027的博客 658

PID详解

1、什么是PID及其作用 设定一个输出目标,反馈系统传回输出值,如与目标不一致,则存在一个误差,PID 根据此误差调整输入值,直至输出达到设定值. 为什么需要PID呢,比如控制温度,我们需要设置一个要达到的目标温度值,当将温度稳定在目标温度值 例如,我们希望水的目标温度值为70°,其希望无非就是可以快速而且无抖动的达到70°,并稳定在70° 如果我们使用普通的方式加热,当温度到达70°后就以及停止加热,岂不是简单快速,当然用在要求不高的场合也可以,但是如果要求更高的场合呢,会出现温度到达70°后......

weixin_48435215的博客 5万+

环形链表的快慢指针

由于快指针速度是慢指针的两倍,所以x+k+ny = 2(x+k)。从公式可以看出,一个指针a从头结点开始移动,另一个指针b从k位置开始移动,当a移动x步到达环形入口,b正好与a相遇。由此可以算出环形入口的位置。快指针一次两步,慢指针一次一步,当快慢指针相遇时,设慢指针在环内走了k步(慢指针在绕环一圈前就会被快指针追上),块指针在环内绕了n圈。那么此时慢指针走了x+k步,快指针走了x+k+ny。定义两个指针指向头结点,慢指针一次走一步,快指针一次走两步,再次相遇时,快慢指针相差的步数就是环形链表的节点数。

qq_38252052的博客 281

手把手教你用Matlab/Simulink搭建PMSM的SMO无感FOC仿真(附相位补偿与离散化代码)

本文详细介绍了基于滑模观测器(SMO)的永磁同步电机(PMSM)无传感器FOC控制方法,通过Matlab/Simulink平台实现从理论到实践的完整流程。内容涵盖SMO核心原理、离散化处理、转子位置估算与相位补偿技术,以及双闭环控制系统搭建,为工程师提供了一套完整的无传感器控制解决方案。

weixin_27038245的博客 256

医疗器械软件测试输出内容(1)

*单元测试(Unit Testing):**单元测试是软件测试的最底层,用于验证软件中最小的可测试单元——函数、方法或模块。系统测试是在集成测试之后进行的,它对整个系统进行测试,验证系统在不同部分集成在一起后是否满足需求和规格。: 集成测试是在单元测试之后进行的,它关注不同单元之间的交互和集成。对于不同安全级别的软件(IEC 62304 A类、B类、C类),在体系上要求输出的文件内容有所区别。**说明:**将集成测试和软件系统测试合并为一项单一的计划和一组活动是可接收的。

ct745363083的博客 1867

快慢指针与带环链表

快慢指针是一种常用的指针技巧,常用于解决链表相关问题。快指针(fast pointer)和慢指针(slow pointer)同时从起点出发,但步长不同。快指针每次移动两个节点,慢指针每次移动一个节点。通过不同的移动速度,可以实现对链表的不同遍历方式。快慢指针常见的应用场景有三种:判断链表是否有环:快指针每次移动两个节点,慢指针每次移动一个节点。如果链表没有环,快指针最终会到达链表的末尾,而慢指针会到达中间位置。如果链表有环,快指针和慢指针最终会相遇。

csq_love_hy的博客 855

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

【链表】判断链表是否有环-快慢指针

一个结点有两个指向的时候就会产生环。例如在一个单链表0-9的数据中,3的下个节点为4,让3的下个结点同时指向9,此时就会在3的位置产生两条路,一个指向9,一个指向4,这就是有环的情况。,如果有环,快慢指针会在环内,永远不会到达空的位置,会陷入死循环。让3的下个结点指向9,构造有环的第二批数据:有环。0-9的第一批数据:无环。

qq_53830608的博客 683

MIPI D-PHY TX 一致性测试实例解析 Part 01

汽车电子领域,尤其是ADAS,伴随着摄像头的大规模布局,MIPI信号的使用日益频繁,关于它的验证与分析工作也变得日益关键

一只豌豆象的博客 1万+

基于深度学习的工业零件缺陷检测系统

工业零件缺陷检测系统摘要 本文介绍了一个基于深度学习的工业零件缺陷检测系统解决方案。该系统采用Faster R-CNN目标检测算法,结合PyTorch框架和OpenCV图像处理库,实现了对工业零件表面缺陷(如裂纹、划痕、凹坑等)的自动检测与定位。系统包含完整的开发流程:从数据采集与标注、数据增强预处理、模型构建与训练,到最终的评估与部署。相比传统机器视觉方法,该深度学习方案具有更强的特征表示能力和环境适应性,能够有效提升工业质检的准确率和效率。文章详细阐述了系统架构设计、实现细节和优化策略,并提供了完整的代

huanghm88的专栏 286

环形链表:快慢指针来帮忙

在链表的操作与算法中,环形链表问题是一个经典且重要的问题。判断链表是否有环以及找到环的入口点是该问题的核心。本文将详细介绍解决该问题的快慢指针算法,包括算法原理、数学推导、代码实现以及案例分析,帮助大家深入理解和掌握这一技巧。

进一步有进一步的欢喜~ 1098

YOLOv11 | 一文带你深入理解ultralytics最新作品yolov11的创新 | 训练、推理、验证、导出 (附网络结构图)

ultralytics发布了最新的作品YOLOv11,这一次YOLOv11的变化相对于ultralytics公司的上一代作品YOLOv8变化还是很大的(YOLOv9、YOLOv10均不是ultralytics公司作品),其中改变的位置涉及到C2f变为C3K2,在SPPF后面加了一层类似于注意力机制的C2PSA,还有一个变化大家从yaml文件是看不出来的就是它的检测头内部替换了两个DWConv,在损失函数方面就没有变化了还是采用的CIoU作为边界框回归损失,下面带大家深入理解一下ultralytics最新作品

Snu77的博客 18万+

快慢指针之环形链表

快慢指针

h53536的博客 777

ISO21434 组织网络安全管理(二)

为了实现网络安全工程,该组织建立并维护网络安全治理和网络安全文化,包括网络安全意识管理、能力管理和持续改进。这涉及到指定针对本文档的目标进行独立审计的特定于组织的规则和过程。 为了支持网络安全工程,该组织实施了网络安全的管理系统,包括管理工具和应用质量管理系统。

qq_42357877的博客 1322

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【快慢指针】突破环形链表

快慢指针,带你突破环形链表!(Java数据结构与算法)

小谷同学的博客 1719

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

环形链表问题总结——快慢指针

环形链表问题是快慢指针的一个典型应用。其实,称其为“有环链表”更为准确。 在有环链表中,利用快慢指针可以解决的问题包括: 判断链表是否有环、求环的入口、求环的长度、求链表的总长度(总节点数),等。 目录 一 判断链表是否有环 二 有环链表的入口节点 三 有环链表中环的长度 3.1 方法一:第一次相遇后继续走,直到第二次相遇 3.2 方法二:先求出环的入口节点 四 有环链表的总长度...

cunane的博客 1710

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

环形链表——快慢指针的使用

(2).slow走一步,fast走3步,4步,n步,也一定能追上吗?(1).为什么题目1中一定会相遇,有没有可能会错过,永远追不上?问题(2)(3):假设fast走3步,slow走1步。的条件不能同时出现,永远追不上的条件不能成立。(3).为什么一定相遇?当fast与slow的距离为0时就追上了。问题(1):fast走2步,slow走1步。使用一个指针来进行判断经过同一个点。此时题目就变成了追击问题。N是奇数且c是偶数时。N是奇数且c是偶数时。

小苹果今天也拜托你了 464

环形链表的快慢指针相遇的数学证明

我们说的环形链表是类似于下图的环形链表 慢指针一圈内必遇上 设我们的环长度为CCC。假定我们慢指针的初始位置是环的入口(比如上图的2),设这个位置为0. 而快指针的初始位置是AAA,A∈[0,C−1]A \in [0,C-1]A∈[0,C−1]。 假设慢指针走了K步之后,快慢指针相遇,则慢指针位置:0+K0+K0+K,而快指针的位置是A+2KA+2KA+2K. 此时,显然有一个道理,快指针的初始距离加上它的走过的距离超了慢指针走的距离的nCnCnC. 所以可以得到表达式(A+2K)−(0+K)=nC(A+

或左的博客 1262

Golang leetcode142 环形链表 暴力map 快慢指针法

的情况:刚进入节点时,慢指针此时在相交节点上,快指针在慢指针前面一个。由于快指针的移动速度为2,慢指针的移动速度为1, 二者相对速度为1。什么如果成环,快指针一定会再慢指针没有转完一圈之前追上满指针?我们可以通过map进行记录,没到新的节点查询是否经过原有节点。若有入环节点,则一定能检测到;若没有,则总会到达最后节点。得到二者一定相遇时,我们如何确定到底哪个节点是入环节点?所以当快指针跟在慢指针后面时有以下几种情况。假设环的长度为n,慢指针走完环的步数为n。入环节点,上两个节点的next相同。

kingsill的博客 2368

LeetCode Java 环形链表II(快慢指针)图解

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

m0_73078350的博客 1240

环形链表与快慢指针的关系

保持快慢指针对环形链表的敏感性,快慢指针的相遇情况可以判断是否有环存在。但是认识不能止步于此,快慢指针相遇的点,说明了头节点到该点的距离==该点再走到该点的距离,比较快慢在距离的体现上就是一个2倍关系。

qq_43164662的博客 364

环形链表的快慢指针相遇问题证明

环形链表的快慢指针相遇问题证明 证明1:慢指针一定在环形链表一圈内遇上 首先假设慢指针的每次只走1步,快指针每次走2步,当慢指针走了k次后,慢指针共走了k步,而快指针走了2k步。 假如说,快指针和慢指针一定会相遇,那么一定是在环内,同时快指针已经走了n圈环。此时该问题也就可以转变为一下问题何时有解 2k−k=nB→k=nB(n=1,2,...,N)2k - k = nB \rightarrow k = nB (n = 1,2,...,N)2k−k=nB→k=nB(n=1,2,...,N) 当n=1时,此时有

qq_36309684的博客 1235

LeetCode——环形链表(快慢指针)

题目描述 解题思路 环形链表这个题目最容易出现错误的地方就是死循环的问题,所以我们要注意防止出现死循环,关键的思想就在于如果一个链表是环形链表,一个指针走得快,另一个指针走得慢,那么这两个指针一定会相遇,这就是这道题的核心思想,也是判断链表是否有环的关键思想。 var hasCycle = function(head) { // 快慢指针是解决环形链表的不二法门 let fast = head; let slow = head; while (fast) { if (fast

Always-Learning 475

【Java算法精讲】环形链表检测,快慢指针的妙用!✨

亲爱的同学们,大家好!👋 今天我要和大家分享一个非常有趣又实用的算法问题——环形链表检测。这个问题不仅是面试中的高频考点,也是理解快慢指针技巧的绝佳案例!🌟你有没有想过,如果一个链表中存在环(即某个节点的next指针指向了链表中的某个前面的节点),我们该如何检测出来呢?🤔 或者,你是否好奇为什么"龟兔赛跑"的故事能够启发我们解决这个看似复杂的问题?在我多年的教学经验中,发现很多同学对这个问题的理解存在困难,特别是对快慢指针的工作原理感到困惑。

红目香薰 873

LeetCode | 一探环形链表的奥秘【快慢双指针妙解BAT等大厂经典算法题】

附详细算法图解和证明解说,教你使用快慢双指针一破环形链表的奥秘

做技术人 · 产优质博客 · 找好工作 1880
上一篇: 有效的数独——C
下一篇: 关于软件开发周期为什么总是预估的几倍
Whtiewww
博客等级 码龄7年 54粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值