#14环形链表#

news/2025/3/21 2:11:27/

环形链表

1°题目链接

链接

2°思路

slow和fast指向链表的开始
slow一次走一步
fast一次走两步
不带环 fast就会为空
带环 fast就会在环里追上slow

3°实现

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

4°运行结果

5°延伸问题

1.为什么slow和fast一定会在环中相遇?
会不会在环里面错过 永远遇不上 请证明一下
结论:一定会相遇 但需要证明

2.为什么slow走一步 fast走的两步呢?
能不能fast一次走n步(n>2) 请证明一下
结论:fast一次走n步 n>2不一定会相遇

1.
分析证明:
第一步:slow和fast fast一定是先进环 slow走了入环前距离的一半
第二步:随着slow进环 fast已经在环里面走了一段 走了多少跟环的大小一样
假设slow进环的时候 slow跟fast的距离为N 
fast开始追slow slow每次走1步 fast往前走2步 每追1次 判断一下相遇
每追1次 fast和slow的距离变化:N会自减 最后N变成0就相遇了
每追1次 距离减少1 距离最后减到0的时候就是相遇的点

2.
还是假设slow进环的时候 slow跟fast的距离为N
如果n>2的话 每走一次 距离缩短n-1步
N是n-1的倍数 第一次可以追上 
N不是n-1的倍数 第一次追不上 第二次有可能追上
如果第二次次再追不上 就永远追不上

n=3
差为2 
当N是偶数时 可以追上
当N时奇数不可以追上 但追到最后的时候 距离会变为1
再走一次 变为-1 也就等价于距离变为C-1 C是环的长度
如果C-1是偶数 可以追上
如果C-1是奇数 永远追不上
当C-1时奇数时 会重复第一次N时奇数的过程 
走到最后距离又会变为C-1 死循环 永远追不上

n=4
差为3
当N是3的倍数时 可以追上
当N不是3的倍数时 这一次不可以追上
会出现两种情况 走到最后距离是2或者1
再走一步 距离变为C-1或者C-2 C是环的长度
C-1或者C-2是3的倍数的话   就可以追上
C-1或者C-2不是3的倍数的话 就永远追不上
陷入死循环

同理的话n>2的时候 有可能追不上

#14环形链表#完


http://www.ppmy.cn/news/22018.html

相关文章

三菱Q系列QJ71C24N模块 MODBUS通信(含完整步骤+源代码)

MODBUS通信的其它相关基础知识请参看下面的文章链接: SMART S7-200PLC MODBUS通信_RXXW_Dor的博客-CSDN博客MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。自从 1979 年出现工业串行链路的事实标准以来,…

Qt调用主界面ui

文章目录解决问题简易步骤1. mainwindow.h2. mainwindow.cpp3. UDPserver.h4. UDPserver.cpp头文件互相引用解决问题 为了在其他类中调用主界面MainWindow的ui。 简易步骤 1. mainwindow.h uiuiui: 设置为public #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <Q…

11 |「哈希表」简析

前言 前言&#xff1a;刷「哈希表」高频面试题。 文章目录前言一、简介1、离散化1&#xff09;什么是离散化2&#xff09;离散化存储3&#xff09;离散化映射2、哈希表1&#xff09;什么是哈希表2&#xff09;哈希表存储3&#xff09;哈希函数4&#xff09;哈希冲突二、参考链接…

C++内联函数:那时我还太年轻,并不知道使用inline带来的效率,早已在暗中标好了价格

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 文章目录一、前言二、内联函数1、起源2、概念三、与宏的区别1、宏的缺点2、两者区别四、内联函数的代价代价一&#xff1a;可执…

【数据结构与算法】跳表

&#x1f320;作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《数据结构与算法要啸着学》 &#x1f387;座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;…

4.6--贪心--最小生成树(MST)

一共有两种方法Prim算法和Kruskal算法都可以看作是应用贪心算法设计策略的例子。 Prim算法--选集合S中所有顶点的邻接点 距离最短的那个点&#xff08;不属于S&#xff09;加入集合S Kruskal算法--每次选取最短的且不构成回路的边 它们都利用了下面的最小生成树性质&#xf…

SpringCloud系列(九)[docker 篇] - Centos 7 下 Docker 的安装及基本操作指令

本篇文章将详细介绍 Centos 7 下 Docker 的安装以及一些基本操作指令. DockerDocker 的安装步骤Docker 基本操作指令Docker 的安装步骤 步骤一: 确保自己电脑的虚拟机联网并安装了 yum 工具, 如果没有安装 yum, 则执行下面的命令; yum install -y yum-utils \device-mapper-p…

在Ubuntu系统上Qt安装和配置

一、说明 QT界面本不应该做为一个很高的知识点&#xff0c;问题是&#xff0c;在ROS2的程序实验&#xff0c;需要界面支持&#xff0c;或用界面显得更加方便&#xff0c;因而专门启动该栏目专门介绍QT方法。因为体系比较庞大&#xff0c;因此&#xff0c;需要一点一点渗透学习。…