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

 

              💓 博客主页:倔强的石头的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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】:list容器的基本使用

目录 🚀前言一,list的介绍二,list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插,头删,尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 🚀前言 list中的接口比较多&#xff…

Android Calculator2源码分析与修改

private CalculatorDisplay mDisplay; private Symbols mSymbols new Symbols(); -41,6 44,7 class Logic { private int mLineLength 0; private static final String INFINITY_UNICODE “\u221e”; private static final String ZMS_NUMBER “55555”; public stat…

Windows系统下制作Windows Server系统U盘启动及安装指导

Windows系统下制作Windows Server系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口);下载好对应的系统镜像;下载RUFUS或者软通碟U盘制作启动软件; 二、Windows操作系统下制作U盘启动(这里以使用RUFUS软件…

VirtualBox 安装UOS统信服务器操作系统

1、准备 1.1安装VirtualBox 由于过程简单,不做赘述! 1.2下载UOS服务器版本 下载免费版本即可 服务器与云计算操作系统-统信软件 (uniontech.com)https://uniontech.com/os-serverCloud.html 2、安装 2.1新建虚拟机 2.2选择虚拟机模式,这…

day63 单调栈part02 42. 接雨水 84.柱状图中最大的矩形

42. 接雨水 1.首先单调栈是按照行方向来计算雨水,如图: 2.使用单调栈内元素的顺序 从大到小还是从小到大呢? 从栈头(元素从栈头弹出)到栈底的顺序应该是从小到大的顺序。 因为一旦发现添加的柱子高度大于栈头元素…

【MATLAB】- 随笔 :如何检测一个字符串数组中是否包含自己想要的序列

1. 问题重述 比如我现在有一个 strArray [“a”, “1”, “2”, “b”]; 我想确定里面是否包含[“1”, “2”]; ,由于MATLAB基础库中没有现成的函数可以直接检查连续子数组或连续多个元素的序列,下面给出自定义函数来实现这一功能。 2. 自定义函数 2…

部分CVE复现Web(1)

Apache HTTP Server 路径穿越漏洞CVE-2021-41773 ​ 首先,先来看一下这个漏洞的官方描述: ​ CVE-2021-41773 是在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现了一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目录之外的…

【Linux 12】进程控制

文章目录 🌈 Ⅰ 进程创建01. fork 函数介绍02. 写时拷贝03. fork 常规用法04. fork 调用失败的原因 🌈 Ⅱ 进程终止01. 进程退出场景02. 常见退出方法 🌈 Ⅲ 进程等待01. 进程等待必要性02. 进程等待的方法2.1 wait 方法2.2 waitpid 方法 03.…

函数式编程基本语法

文章目录 1.函数对象表现形式1.Lambda表达式(功能全面)1.基本语法2.只有一行逻辑,该逻辑结果是返回值3.复杂逻辑4.省略参数类型(可以通过上下文推导出类型时,比如实现了函数式接口)5.只有一个参数时&#x…

NAND闪存市场彻底复苏

在全球内存市场逐渐走出阴霾、迎来复苏曙光之际,日本存储巨头铠侠(Kioxia)凭借敏锐的市场洞察力和及时的战略调整,成功实现了从生产紧缩到全面复苏的华丽转身。这一转变不仅彰显了企业在逆境中的生存智慧,也为全球半导…

在 Stable Diffusion 中控制光线的三种方式

光线在摄影中扮演着至关重要的角色,并对图像的整体质量和意境产生重要影响。你可以利用光线来增强主题,创造深度和立体感,传达情感,并突出重要细节。 在本文中,你将了解通过以下方法来控制光线: 光线提示…

基于Java的度分秒坐标转纯经纬度坐标的漂亮国基地信息管理

目录 前言 一、空间表设计 1、物理表结构 二、后台数据管理 1、数据去重 2、去重的具体实现 3、度分秒数据格式转换 4、具体的转换方法 5、新增界面的实现 三、数据管理界面 总结 前言 众所周知,漂亮国在全球范围内部署了大量的基地,用以维持其…

阿里巴巴全球数学竞赛报名条件

#竞赛概览与历史# “阿里巴巴全球数学竞赛”(Alibaba Global Mathematics Competition)由阿里巴巴公益、阿里巴巴达摩院共同举办,面向全球的数学爱好者,集竞赛、培训、交流于一体,旨在全球范围内引领开启关注数学、理解…

monitor-zabbix

监控体系理论 学习本篇文章,了解运维监控系统的前世今生 zabbix官网仓库地址 zabbix官网 https://www.zabbix.com/cn/zabbix官网仓库地址 http://repo.zabbix.com/zabbix/ http://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_…

数字孪生智慧机场:引领航空未来

图扑数字孪生技术赋能智慧机场,实现运营管理和乘客服务的全面优化。实时数据监控与智能决策助力高效安全的航空体验,推动行业创新与发展。

分布式理论与设计 三、分布式一致性协议

1.两阶段提交协议(2PC) 1)两阶段提交协议 两阶段提交协议,简称2PC(2 Prepare Commit),是比较常用的解决分布式事务问题的方式,要么所有参与进程都提交事务,要么都取消事务,即实现A…

EasyRecovery电脑数据恢复软件2024数据守护神#误删文件神器#硬盘恢复利器#数据丢失救星

🌐 你是否曾经因为误删文件、硬盘损坏等原因,失去了重要的数据?别担心,EasyRecovery电脑数据恢复软件是你的救星!它能够帮你找回丢失的文件,让你的数据重新焕发生机。 🔍 EasyRecovery软件的核…

Enhancing CLIP with GPT-4: Harnessing Visual Descriptions as Prompts

标题:用GPT-4增强CLIP:利用视觉描述作为提示 源文链接:Maniparambil_Enhancing_CLIP_with_GPT-4_Harnessing_Visual_Descriptions_as_Prompts_ICCVW_2023_paper.pdf (thecvf.com)https://openaccess.thecvf.com/content/ICCV2023W/MMFM/papers/Manipara…