【数据结构与算法 刷题系列】判断链表是否有环(图文详解)

 

              💓 博客主页:倔强的石头的CSDN主页 

             📝Gitee主页:倔强的石头的gitee主页

   ⏩ 文章专栏:《数据结构与算法 经典例题》C语言

                                  期待您的关注

1b7335aca73b41609b7f05d1d366f476.gif

目录

一、问题描述

二、解题思路

1.解题思路:

2.快慢指针的移动分三个阶段:(详细图解)

额外思考

三、代码实现


一、问题描述

原题链接

141. 环形链表 - 力扣(LeetCode)

二、解题思路

1.解题思路:

  • 从环形链表的特点入手——在环中的某个节点,通过next指针连续跟踪可以再次达到。
  • 不过,想要通过比对指针是否循环回到了某个节点,是行不通的,因为无法得知链表是从哪个节点进入环的。

  • 通过快慢指针可以实现判断——慢指针每次走一步,快指针每次走两步
  • 假设存在环的话,快指针会先进环,此时慢指针在环外走了一半;
  • 继续走,当慢指针进环时,快指针已经在环中走了一段时间;
  • 此时快慢指针的相对位置未知,但也无须得知。
  • 因为此时快慢指针都在环中,而快慢指针每移动一次,两者之间的距离都减小一步,当快慢指针相遇,就可以证明链表是带环的
  • 如果快指针先走向了NULL,则说明链表不带环

这种方法的关键在于,如果存在环,那么快指针最终会追上慢指针。

2.快慢指针的移动分三个阶段:(详细图解)

(假设链表存在环的情况)

第一阶段: 从初始位置到快指针进环
第二阶段: 从快指针进环 到 慢指针进环
第三阶段: 从慢指针进环 到快指针追上慢指针

额外思考

如果链表带环,会出现快慢指针错过永远无法相遇的情况吗?

不会存在,因为在环中,快指针每次比慢指针多走一步,两个指针之前的距离每次近一步,在环内,快指针相对于慢指针的“速度差”是恒定的,即使环中只有一个节点,也会相遇

三、代码实现

思路的逻辑比较复杂
不过,代码的实现相对简单

只需要定义两个快慢指针
while循环遍历,快指针每次走两步,慢指针每次走一步

如果快慢指针指向节点相同,则说明链表带环
如果快指针走到NULL,说明链表不带环

struct ListNode {int val;struct ListNode *next;};bool hasCycle(struct ListNode *head) 
{struct ListNode*slow,*fast;slow=fast=head;while(fast&&fast->next){slow=slow->next;//注意应该先移动再判断fast=fast->next->next;if(slow==fast)//否则就会因为初始位置相同返回true{return true;}}return false;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

✅生产问题之Emoji表情如何操作存储,MySQL是否支持

针对 Emoji 表情 MySQL 存储是否支持的问题,结论是: MySQL 中可以存储 emoji 表情,但需要使用 UTF8MB4 字符编码。如果使用 UTF8MB3,存储这些扩展字符会导致解析错误。 课外补充 MySQL 对 Unicode 的支持 Unicode 字符集已成为…

6.17作业

升级优化自己应用程序的登录界面。 要求: 1. qss实现 2. 需要有图层的叠加 (QFrame) 3. 设置纯净窗口后,有关闭等窗口功能。 4. 如果账号密码正确,则实现登录界面关闭,另一个应用界面显示。 //发送端头文件…

AI训练Checkpoint对存储的影响

检查点(Checkpoints)是机器学习和深度学习训练过程中的一个重要机制,旨在定期保存训练状态,以便在训练过程中遇到失败或中断时能够从中断处恢复训练,而无需从头开始。 随着模型参数量的剧增,Checkpoint文件…

经历的分享

我是三本计算机科学技术跨考上岸的学生,本科阶段技术能力并没有掌握多少,在选择导师时屡屡碰壁,我当时向许多计算机方向的导师,比如大数据方向,计算机视觉 迁移学习和图像处理方向的导师全都拒绝了我,最终学校给我分配…

【机器学习300问】122、RNN面临哪些问题?

循环神经网络(RNN)主要面临梯度消失和梯度爆炸两个核心问题,这严重影响了其处理长期依赖的能力。此外,还存在一些其他的技术挑战。 一、两个主要问题 (1)梯度消失和梯度爆炸问题 这是RNN中最显著的问题之…

区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现CNN-ABKDE卷积神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-ABKDE卷积神经网络自适应…

大话设计模式解读03-装饰模式

本篇文章,来解读《大话设计模式》的第6章——装饰模式。并通过C代码实现实例代码的功能。 注:第3~6章讲的是设计模式中的一些原则(第3章:单一职责原则;第4章:开放-封闭原则;第5章:依…

嵌入式linux系统中SPI子系统原理分析01

大家好,今天给大家分享一下,如何使用linux系统中的SPI通信协议,实现主从设备之间的信息传递。 SPI是一种常见的设备通用通信协议。它是一个独特优势就是可以无中断发送数据,可以连续发送或接收任意数量的位。而在I2C和UART中,数据以数据包的形式发送,有限定位数。 …

FreeBSD通过CBSD管理低资源容器jail来安装Ubuntu子系统实践

简介 FreeBSD、CBSD、Jail和Ubuntu,四者的组合方案可以说是强强联合,极具性价比和竞争力!同时安装简单方便,整体方案非常先进。 CBSD是为FreeBSD jail子系统、bhyve、QEMU/NVMM和Xen编写的管理层。该项目定位为一个综合解决方案…

wondershaper 一款限制 linux 服务器网卡级别的带宽工具

文章目录 一、关于奇迹整形器二、文档链接三、源码下载四、限流测试五、常见报错1. /usr/local/sbin/wondershaper: line 145: tc: command not found2. Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist: No URLs.. 一、关于奇迹整形…

Langchain中使用Ollama提供的Qwen大模型进行Function Call实现天气查询、网络搜索

Function Call,或者叫函数调用、工具调用,是大语言模型中比较重要的一项能力,对于扩展大语言模型的能力,或者构建AI Agent,至关重要。 Function Call的简单原理如下: 按照特定规范(这个一般是L…

多尺度特征提取:原理、应用与挑战

多尺度 多尺度特征提取:原理、应用与挑战**原理****应用****挑战****总结** 多尺度特征提取:原理、应用与挑战 在计算机视觉、自然语言处理和信号处理等领域,有效地捕捉和解析数据的多种尺度特性是至关重要的。多尺度特征提取是一种技术&…

融资融券有哪些交易技巧,两融利率现在最低多少?4.0%!

融资融券交易技巧 授信额度技巧 当我们账户净资产有显著增长时,最好主动申请增加信用额度,这样在后面行情好转入资金需要进行更多融资融券交易时就不会受限于授信额度,避免因为临时申请增加额度而错过交易机会。 买入委托技巧 现金的折算率…

小孟再接盲盒小程序,3天开发完!

大家好,我是程序员小孟。 前面开发了很多的商业的单子,私活联盟的小伙伴慢慢的逐渐搞自己的产品。 前面的话,开发了盲盒小程序,最近又接了一款盲盒小程序。因为前面有开发过,所以我们的成本也少了很多。 盲盒小程序…

2024.6.17 作业 xyt

今日作业: 升级优化自己应用程序的登录界面。 要求: 1. qss实现 2. 需要有图层的叠加 (QFrame) 3. 设置纯净窗口后,有关闭等窗口功能。 4. 如果账号密码正确…

Marin说PCB之orcad-capture原理图封装库的创建总结----01

今天是个不错的日子,我早上一出门刚骑车到半路就开始下大雨了,可是天气预报上明明说的没有雨啊,所以说天气预报就像是女人的脾气一样,难以揣摩啊,也尽量少去揣摩吧。 小编我刚刚到公司,就收到美国分部同事J…

【C语言】排序算法 -------- 计数排序

个人主页 创作不易,感谢大家的关注! 文章目录 1. 计数排序的概念2. 计数排序使用场景3. 计数排序思想4. 计数排序实现过程5. 计数排序的效率6. 总结(附源代码) 1. 计数排序的概念 计数排序是一种非比较的排序算法,其…

分享三款AI智能修图工具,超实用!

随着AI技术的飞速发展,图像处理领域正经历着一场颠覆性的革新。如今,众多繁琐的图像处理任务,诸如修图、抠图以及高清修复等,均可以借助先进的AI技术实现自动化处理。相较于传统的人工操作,AI图像工具不仅极大地提升了…

3d中毒了打不开模型怎么办---模大狮模型网

3D中毒了打不开模型怎么办?这是很多3D爱好者都会遇到的问题。在使用3D建模软件时,有时会出现打不开模型的情况,这可能是由于软件本身的问题,也可能是由于电脑配置不够高导致的。下面我们就来看看如何解决这个问题。 首先&#xff…

探索未来通信的新边界:AQChat一款融合AI的在线匿名聊天

探索未来通信的新边界:AQChat一款融合AI的在线匿名聊天 在数字时代,即时通讯变得无处不在,但隐私和性能仍旧是许多用户和开发者关注的焦点。今天,我要介绍一个开创性的开源项目 —— AQChat,它不仅重定义了在线匿名聊…