[Fast & Slow pointers] 判断链表是否有环-快慢指针

【C++】链表判环 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部 阅读详情

0. 题干

leetcode 141. 循环链表

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

示例 1:

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

在这里插入图片描述

示例 2:

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

在这里插入图片描述

示例 3:

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

在这里插入图片描述

1. 解法

/***

* Definition for singly-linked list.
* struct ListNode {
*      int val;
*	   ListNode *next;
*	   ListNode(int x) : val(x),next(NULL) {}
* };
*/

class Solution{
public:
bool hasCycle(ListNode* head){

	
	//两个指针位于同一起点
	
	ListNode* fast=head; //快指针
	ListNode* slow=head; //慢指针
	
	if ( head == NULL) //输入链表为空,必然不是循环链表
		 return false;
		 
		 
	while (fast != NULL && fast->next != NULL)
	{
		
		fast=fast->next->next; //快指针每次迈两步
		slow=slow->next; //慢指针每次迈一步
		
		if ( fast == slow) //如果两个能相等,说明链表有环
			return true; // 不然肯定不相等,快指针永远比慢指针快
	}
	
	return false; //走到这里,说明快指针到了单链表的结尾
	}
	
};

在这里插入图片描述

判断链表是否存在环(C/C++实现) 在本文中,我们介绍了两种常用的方法来判断链表是否存在环:快慢指针法和哈希表法。通过理解这些方法的原理,并使用相应的源代码实现,我们可以在C/C++编程语言中轻松地判断链表是否存在环。如果链表中存在环,那么快指针最终会追上慢指针,即两个指针会相遇。在本文中,我们将讨论如何使用C/C++编程语言来判断一个链表是否存在环。在链表中,如果一个节点的指针指向了链表中的一个已经访问过的节点,那么这个链表就存在环。换句话说,存在一个节点,它的下一个节点指针指向了链表中的一个之前已经访问过的节点。 阅读详情

相关推荐

缠中说禅交易指南

战胜市场,其实就是战胜自己的贪婪、恐惧、愚蠢,缠中说禅技术分析理论只是把市场拔光给各位看,而拔光一个人并不意味着就等于征服一个人,对于市场,其道理是一样的。不干,不可能征服市场。对于市场来说,干就是一切。技术分析的最终意义不是去预测市场要干什么,而是分析市场正在干什么,是一种当下的直观。在市场上所有的错误都是离开了这当下的直观,用想象、用情绪来代替。 市场是有规律的,但市场的规律并不是显而易见的,是需要严格的分析才能得到。更重要的是,市场的规律是一种动态的,在不同级别合力作用下显示出来的规律,企图用些单纯的

baidu_25764509的博客 2万+

判断链表中是否有环

描述 判断给定的链表中是否有环。如果有环 则返回true,否则返回false。 数据范围:链表长度100000≤n≤10000,链表中任意节点的值满足 ∣val∣<=100000 要求:空间复杂度 O(1),时间复杂度 O(n) 输入分为两部分,第一部分为链表,第二部分代表是否有环,然后将组成的head头结点传入到函数里面。-1代表无环,其它的数字代表有环,这些参数解释仅仅是为了方便读者自测调试。实际在编程时读入的是链表的头节点。 例如输入{3,2,0,-4},1时,对应的链表结

qq_50982405的博客 772

GD32重映射实战:从部分映射到完全映射的配置解析

本文深入解析GD32微控制器的重映射功能,以定时器1的PWM通道为例,详细阐述了从部分映射到完全映射的实战配置流程。文章重点介绍了AFIO模块的核心作用、配置寄存器操作以及关键的避坑指南,旨在帮助开发者灵活优化PCB布局并解决引脚资源冲突,从而高效利用芯片外设功能。

k6l7m8n9的博客 694

[算法|C++]如何判断链表有环

如何判断链表有环? 题目 解决方法: 代码 问题扩展

weixin_45922730的博客 1562

【Maxwell16.0】实战指南:从DXF导入到MotorCAD联合仿真的关键技巧

本文详细解析了Maxwell 16.0与MotorCAD进行联合仿真的核心流程与关键技巧。重点阐述了从DXF模型导入、几何修复、一极一槽模型剪裁,到坐标系对齐、MotorCAD参数匹配及结果验证的全过程,旨在帮助工程师高效打通联合仿真链路,规避常见错误,提升电机设计效率。

weixin_29062865的博客 715

人工智能渗透测试:自动化安全评估

渗透测试认证的价值包括提高可信度和技能水平,并帮助客户确保由经过认证的个人对其系统进行全面的手动调查。B2B 交互变得越来越复杂,特别是功能丰富的超级应用程序,需要采取强有力的安全预防措施,而自动化渗透测试应用程序则是一种未被发现的武器。渗透测试中的人工智能通过提高效率、自动收集信息、发现隐藏的漏洞、开发个性化攻击和减少误报来提高 B2B 集成的安全性。这包括风险简报、补救建议和战略建议。渗透测试由五个阶段组成,是网络安全中的关键防御措施,它模拟现实世界的攻击,以识别系统缺陷并在漏洞被利用之前解决它们。

weixin_48967543的博客 2361

C++:判断链表是否有环

判断给定的链表中是否有环。如果有环则返回true,否则返回false。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head)

xikangsoon的博客 1689

告别臃肿!保姆级教程:用NTLite深度精简Win10,打造你的专属纯净系统(附完整组件移除清单)

本文提供了一份详细的NTLite教程,帮助用户深度精简Windows10系统,移除冗余组件并优化性能。从准备工作到组件移除清单,再到系统配置优化和无人值守安装,逐步指导用户打造专属纯净系统。附完整组件移除清单和实战经验,确保系统稳定高效运行。

weixin_30945039的博客 855

CPU 缓存 | 原理、映射、一致性

……

u013669912的博客 410

期末求生指南:手把手教你用浏览器开发者工具绕过百一测评切屏检测

本文详细介绍了如何利用浏览器开发者工具绕过百一测评的切屏检测功能。通过分析JavaScript事件监听机制,定位关键检测代码,并提供实时调试和本地覆盖两种修改方法,帮助学生在遵守规则的前提下更灵活地应对在线考试。文章还包含风险控制和替代方案等实用建议。

weixin_28698059的博客 548

【时时三省】tessy 单元测试 之 CTE(The Classification Tree Editor) 的使用

有图有文字详细介绍利用 CTE界面中的树 批量产生用例。

时时三省的博客 837

C++(面试题):判断一个链表是否带环,求环的长度,找到环入口节点

博主面试的过程中遇到了这么一个面试题,判断一个链表是否带环,并且如果有环的话,要找到环的入口节点,并且求出环的长度~ 那么我们大家一起来分析一哈(っ•̀ω•́)っ✎⁾⁾ 假设链表的节点的结构是这样的 struct ListNode { int val; ListNode* next; }; 判断一个链表是否带环 方法一:快慢指针 定义一个快指针和慢指针都指向链表的head,快指针一次走两步,...

ETalien_的博客 2573

产品需求从场景,初始需求IR,产品需求 OR,设计需求DR,设计规格DS的具体案例说明,以扫地机产品为例

摘要: 以扫地机器人"宠物粪便避障"功能为例,说明从用户场景到产品落地的完整需求转化路径。初始需求(IR)源于养宠家庭痛点,要求100%避障并自动告警;产品需求(OR)转化为≥98%识别准确率等量化指标;设计需求(DR)拆解为感知、决策、执行三大技术模块;最终形成传感器选型(如索尼IMX678)、芯片规格(高通QCS6490)等设计规格(DS)。通过实验室模拟和用户测试验证,该功能使产品溢价30%,养宠家庭购买占比达52%,实现技术与商业价值的统一。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 769

leetcode_刷题总结(c++)_快慢指针_环形链表

主要参考: 文章目录快慢指针算法思想问题1、为什么fast和slow一定会相遇?问题2、fast和slow相遇时,slow指针是否绕环超过一圈?问题3、为什么ptr和slow相遇的节点一定是入环点?问题4、为什么fast指针每次移动2步,能不能移动3、4、5...步?快慢指针解题模板leetcode部分相关题目[141. 环形链表](https://leetcode.cn/problems/linked-list-cycle/)[142. 环形链表 II](https://leetcode.cn/probl

zxm_的博客 946

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

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

C++判断链表有无环(有则给出位置)双指针或哈希表

如图例子:有环的话则会返回节点位置 一、双指针法: 1.先判断是否存在环 2.当第一次快慢指针相遇时,说明存在环,此时相遇点在圆内,此时慢指针走过的距离是x+y,快指针走过的距离是x+y+z+y,因为快指针走过的距离是慢指针的2倍,所以得到等式2(x+y)=x+y+z+y,所以x = z 3.接下来,令res = head,让res和slow同时再走一段距离为x的路程,二者就在环入口相遇 为何慢指针第一圈走不完一定会和快指针相遇? 首先,第一步,快指针先进入环 第二步:当慢指针刚到达环的入口时,快.

qq_41884662的博客 520

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

c++数据结构-判断链表是否有环,以及环长度,进入环的第一个节点

c++数据结构-判断链表是否有环,以及环长度,进入环的第一个节点 1:判断单链表是否有环 //判断链表是否有环(快慢指针,快指针走两步,慢指针每次走一步,如果相遇有环,如果走到终点没有环) bool hasCircle(ListNode* pHead) { //判断pHead是否为空或者只有一个节点 if (pHead == nullptr ) return false; //定义前后指针 ListNode* pAhead = pHead; ListNode* pBhead = pHead;

Tang_AHMET的博客 766

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++ 判断链表有没有环

根据链表特点,使用以下技术。

m0_56306892的博客 377

C++单链表检测是否有环详解

1. 判断单链表是否有环。 2. 如果单链表有环,判断环长,入口点位置。 3. 判断链表长度。 这个问题网上有很多种解法,其中一种是快慢指针法。定义快慢两个指针,快指针一次移动两个节点,慢指针一次移动一个节点,从表头开始遍历链表。如果有环,快慢指针会在环中相遇,然后停止遍历。如果没有环,快慢指针会遍历到链表结尾的空节点,然后停止遍历。 ...

gdizcm的专栏 1166

快慢指针算法(c++版)

一个发现:s与f经过n次循环相遇,s走了n, f走了2n, 记原点到环入口距离为m, 那么s在环中距离为n-m, 同理,f在环中距离为2n-m,此时有f == s, (2n-m - (n - m) )%c = 0,即 n%c=0 , 循环次数就是环中数字的倍数。,即当前的值是下一个值的索引(位置或地址),这就形成了一个与原来不一样的序列,4--3--7--8--6(后)--1--2--5--6(前)--1--2....虽然两个6不一样,但6所指向的其他序列都是一样的,即生成了环形。,判断链表中是否有环。

qq_61840254的博客 1165

C++判断链表是否有环

【代码】C++判断链表是否有环。

demonstracy的博客 485

C++笔试题之判断链表中是否有环,并计算环的长度

判断链表中是否有环最经典的方法就是快慢指针,同时也是面试官大多想要得到的答案。 快指针pf(f就是fast的缩写)每次移动2个节点,慢指针ps(s为slow的缩写)每次移动1个节点,如果快指针能够追上慢指针,那就说明其中有一个环,否则不存在环。 这个方法的时间复杂度为O(n),空间复杂度为O(1),实际使用两个指针。原理 链表存在环,则fast和s...

草上爬的博客 6192

LeetCode141. 环形链表【快慢指针】

题目难度:简单 题目描述: 给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? /** * Defi

Closure 327

判断链表中是否有环·C++·简单

判断给定的链表中是否有环 扩展: 你能给出空间复杂度的解法么?

笔记的博客 1036

C++判断一个单链表是否有环

面试时只想到了最简单的遍历方法,每遍历一个节点,都保存节点,到新节点时,从保存的节点中查找是否存在地址相同的,存在就是有环的,否则无环。问我有没有别的方法时,就想不到了。 有环链表 看图更直观。 // 指针节点定义 struct node { int val; struct node *next; node(int x) : val(x), next(NULL) {} }...

Passerby的博客 1996

代码题--C++--判断单链表其中是否有环,寻找链表入环结点

代码题--C++--判断单链表其中是否有环,寻找链表入环结点 题目:给定一个单链表,(1)判断其中是否有环,(2)寻找链表入环结点。 1.判断时候有环(链表头指针为head) 对于这个问题我们可以采用“快慢指针”的方法。就是有两个指针fast和slow,开始的时候两个指针都指向链表头head,然后在每一步 操作中slow向前走一步即:slow = slow->next,而fast每一步向前两步即:fast = fast->next->next。 由于fast要比slow移动的快,

数组越界,数组进栈 652

为什么用快慢指针找链表的环,快指针和慢指针一定会相遇

https://www.zhihu.com/question/23208893 首先相遇不是操场跑圈,快的能追上慢的,这还用问吗,肯定能追上。而楼主问的是一个人是跳1个格子,另一个跳2个格子,会不会每次要相遇的时候,快的都会跳过慢的那个,从而不会相遇在一个格子。(重点是为什么一定会相遇在一个格子) 通俗点可以理解为他们的相对速度只差一个格子,快的只能一个一个格子的去追慢的,必然在...

weixin_30378623的博客 745
上一篇: [Sliding window] 水果成篮-双指针
下一篇: [Fast & Slow pointers] 返回环形链表开始入环的第一个节点
1byte ≠ 8bit
博客等级 码龄8年 7242粉丝 170原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值