【数据结构初阶】详解 环形链表:链表的带环问题(判断是否带环、环形链表的入口点)

文章目录

  • 一、链表的带环问题
    • 1.1、判断链表是否带环(力扣 141.环形链表)
    • 1.2 、证明:为什么带环时快慢指针一定相遇?
    • 1.3、证明:当slow走1步,fast可走3/4/5步(fast的速度是slow的3/4/5倍)吗?
      • 1.3.1、slow走1步,fast走3步
      • 1.3.2、slow走1步,fast走4步
    • 1.4、代码
    • 2.1、判断环形链表的入口点(力扣 142.环形链表2)
      • 2.1.1、方法一:相遇
      • 2.1.2、方法二:链表的相交
    • 2.2、代码
  • 二、谢谢观看!

一、链表的带环问题

1.1、判断链表是否带环(力扣 141.环形链表)

题目:给你一个链表的头节点 head ,判断链表中是否有环。如果链表中存在环 ,则返回 true 。 否则,返回 false 。

带环:链表的尾节点的next指向链表中的任一节点。
环形链表如下:
在这里插入图片描述
方法:快慢指针(追击相遇问题)
快指针:fast,慢指针:slow
令fast的速度是slow的2倍,那么在相同的时间内,fast走过的路程是slow的2倍。
故可得:
在这里插入图片描述
结论:若带环,快指针fast一定能追上slow,即fast与slow一定会相遇。
若不带环,fast先到达尾节点,结束,此时fast一定在尾,slow在中间,不会相遇。

1.2 、证明:为什么带环时快慢指针一定相遇?

在这里插入图片描述
当二者间距离变为0时,fast与slow相遇。

在这里插入图片描述
如上图所示,随slow与fast的移动,二者间的距离一定会变为0,即fast与slow一定会相遇。

1.3、证明:当slow走1步,fast可走3/4/5步(fast的速度是slow的3/4/5倍)吗?

首先要明白一点:速度的倍数关系存在的根本原因是为了判断二者在该速度下一定能相遇。来作为判断是否带环的区分。所以如果能相遇(追上),就可以作为链表带环的判断条件。

1.3.1、slow走1步,fast走3步

在这里插入图片描述
由上图可知:
1、当N为偶数时,N最终能够变化为0,一定能相遇。
2、当N为奇数时,设环的周长为C,距离变化为-1时,即fast快slow一步,那么第二轮追击时二者间距为N=C-1,那么若C-1为偶数,第二轮可以追上;若C-1为奇数,第二轮追不上。
那么由上追不上的情况只有N为奇数且C-1为奇数。
但是 由fast的总路程我们可以得到以下等式: 在这里插入图片描述得到等式 2L=(x+1)*C-N,等式左边为偶数,当N为奇数, C-1为奇数即C为偶数时,
偶数-奇数不等于偶数,故此时等式不成立,所以不存在N为奇数,C-1为奇数的情况。

结论:
当N为偶数时,第一轮就能追上
当N为奇数时,若C-1为偶数,第二轮能追上
而N为奇数,C-1为奇数的情况不存在
所以当slow走1步,fast走3步时一定可以追上。

1.3.2、slow走1步,fast走4步

相当于slow每走1步,二者的间距减少3
在这里插入图片描述

1.4、代码

这里的循环条件是 fast不为空且fast->next不为空。
原因:NULL不能再进行解引用操作。
若fast为空,那么在fast=fast->next->next中,fast->next进行了解引用,程序报错。
若fast->next为空,那么在fast=fast->next->next中,fast->next->next进行了解引用,程序报错。

bool hasCycle(struct ListNode *head) {struct ListNode *fast=head, *slow=head;while(fast && fast->next){slow=slow->next;fast=fast->next->next;if(fast == slow)return true;}return false;
}

2.1、判断环形链表的入口点(力扣 142.环形链表2)

题目:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
在这里插入图片描述

2.1.1、方法一:相遇

head为头指针,指向链表的头结点。
meet为相遇指针,指向fast与slow相遇的位置。
在这里插入图片描述
结论:head与meet同时走,一定会在入口点相遇。
证明:
由上可得,本题一定要使用快慢指针的追击相遇,那么fast与slow有速度差,根据1.1的证明,我们还是使用速度为二倍关系比较容易。
即 slow走1步,fast走2步。
在这里插入图片描述
在这里插入图片描述

2.1.2、方法二:链表的相交

在这里插入图片描述
找到入口点后,再把环形链表还原即可。

2.2、代码

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fast=head, *slow=head;while(fast && fast->next){slow=slow->next;fast=fast->next->next;if(fast==slow){struct ListNode *meet=slow;//相遇点while(head != meet){head=head->next;meet=meet->next;}return meet;}}return NULL;
}

二、谢谢观看!

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

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

相关文章

Open3d入门 一文读懂三维点云

三维点云技术的发展始于20世纪60年代,随着激光雷达和三维扫描技术的进步,在建筑、考古、地理信息系统和制造等领域得到了广泛应用。20世纪90年代,随着计算机处理能力的提升,点云数据的采集和处理变得更加高效,推动了自…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(二)-支持高分辨率视频直播应用

引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…

【调试笔记-20240713-Windows-Tauri 多个HTML页面支持】

调试笔记-系列文章目录 调试笔记-20240713-Windows-Tauri 多个HTML页面支持 文章目录 调试笔记-系列文章目录调试笔记-20240713-Windows-Tauri 多个HTML页面支持 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调试步骤搜索相似问题 三、应用场…

FPGA入门-自用

写代码,并将引脚对应到板子相应的引脚上 下载程序到板子上 遇到错误了,不按想的来的了,进行仿真 查看网表图查看问题所在 简化了一些步骤:未使用引脚的设置,电压设置; 通过画网表结构图来构成电路 时钟 …

SpringBoot+Vue实现简单的文件上传(txt篇)

SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 页面 3 效果&#xff1a;只能上传txt文件且大小限制为2M&#xff0c;选择文件后自动上传。 4 前端代码 <template><div class"container"><el-…

Windows安装linux子系统

Windows安装linux子系统 步骤 1 - 启用适用于 Linux 的 Windows 子系统 需要先启用“适用于 Linux 的 Windows 子系统”可选功能&#xff0c;然后才能在 Windows 上安装 Linux 分发。 以管理员身份打开 PowerShell&#xff08;“开始”菜单 >“PowerShell” >单击右键 …

Ubuntu 安装搜狗输入法

搜狗输入法已支持Ubuntu1604、1804、1910、2004、2010 各系统安装步骤可能略有不同 1、添加中文语言支持 打开 系统设置——区域和语言——管理已安装的语言——在“语言”tab下——点击“添加或删除语言” 弹出“已安装语言”窗口&#xff0c;勾选中文&#xff08;简体&…

[笔试训练](二十七)109:旋转字符串110:合并k个已排序的链表111:滑雪

目录 109:旋转字符串 110:合并k个已排序的链表 111:滑雪 109:旋转字符串 题目链接:旋转字符串_牛客题霸_牛客网 (nowcoder.com) 题目: 题解: class Solution { public:bool solve(string A, string B) {int nA.size();if(n!B.size()) return false;for(int i0;i<n;i){…

java《ArrayList篇》--ArrayList全套知识点总结及其配套习题逐语句分析(附带全套源代码)

一、前言 来不及悼念字符串了&#xff0c;接下来登场的是集合&#xff0c;集合和数组的用法差不多&#xff0c;不同之处就在于存储的内容&#xff0c;数组是固定的长度的&#xff0c;集合的长度不固定。学习的过程中可以参照数组 今天已经是学习java的第八天了&#xff0c;接下…

LabVIEW中modbusTCP怎样才能和profibusDP通信?

在LabVIEW中&#xff0c;Modbus TCP和Profibus DP是两种不同的工业通信协议&#xff0c;要实现这两者之间的通信&#xff0c;可以采用网关设备进行协议转换&#xff0c;或者通过一个中间设备&#xff08;如PLC&#xff09;进行数据桥接。以下是实现此通信的一些方法&#xff1a…

win10系统更新后无法休眠待机或者唤醒,解决方法如下

是否使用鼠标唤醒 是否使用鼠标唤醒 是否使用键盘唤醒

unity 手动制作天空盒及使用

提示&#xff1a;文章有错误的地方&#xff0c;还望诸位大神不吝指教&#xff01; 文章目录 前言一、使用前后左右上下六张图1.准备6张机密结合的图片2.创建Material材质球3.使用天空盒 二、使用HDR贴图制作1.准备HDR贴图2.导入unity 修改Texture Sourpe 属性3.创建材质球4.使用…

【java计算机毕设】基于J2EE的仓库管理系统设计与开发源码带文档MySQL ssm vue maven前后端可分离也可不分离

目录 1项目功能 2项目介绍 3项目地址 1项目功能 2项目介绍 系统功能&#xff1a; 仓库管理系统包括管理员、员工俩种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、管理员管理、仓库信息管理、基础数据管理功能模块有仓库类型管理和物资类型管理、物资信息管理…

CSS学习碎碎念之卡片展示

效果展示&#xff1a; 代码展示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图片展示</title…

Android C++系列:Linux网络(三)协议格式

1. 数据包封装 传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用 socket API编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下 处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层 数据通过协议栈发到…

《Linux系统编程篇》vim的使用 ——基础篇

引言 上节课我们讲了&#xff0c;如何将虚拟机的用户目录映射到自己windows的z盘&#xff0c;虽然这样之后我们可以用自己的编译器比如说Visual Studio Code&#xff0c;或者其他方式去操作里面的文件&#xff0c;但是这是可搭建的情况下&#xff0c;在一些特殊情况下&#xf…

(十一) Docker compose 部署 Mysql 和 其它容器

文章目录 1、前言1.1、部署 MySQL 容器的 3 种类型1.2、M2芯片类型问题 2、具体实现2.1、单独部署 mysql 供宿主机访问2.1.1、文件夹结构2.1.2、docker-compose.yml 内容2.1.3、运行 2.2、单独部署 mysql 容器供其它容器访问&#xff08;以 apollo 为例&#xff09;2.2.1、文件…

pyinstaller教程(二)-快速使用(打包python程序为exe)

1.介绍 PyInstaller 是一个强大的 Python 打包工具&#xff0c;可以将 Python 程序打包成独立的可执行文件。以下会基于如何在win系统上将python程序打包为exe可执行程序为例&#xff0c;介绍安装方式、快速使用、注意事项以及特别用法。 2.安装方式 通过 pip 安装 PyInstal…

万界星空科技MES系统:食品加工安全的实时监控与智能管理

万界星空科技MES系统通过集成多种技术和功能&#xff0c;能够实时监控食品加工过程中各环节的安全风险。以下是对该系统如何实现实时监控的详细分析&#xff1a; 一、集成传感器和数据分析技术 万界星空科技MES系统利用集成的传感器和数据分析技术&#xff0c;实时监控生产过程…

基于SSM的校园一卡通管理系统的设计与实现

摘 要 本报告全方位、深层次地阐述了校园一卡通管理系统从构思到落地的整个设计与实现历程。此系统凭借前沿的 SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架精心打造而成&#xff0c;旨在为学校构建一个兼具高效性、便利性与智能化的一卡通管理服务平台。 该系…