力扣141.环形链表142.环形链表Ⅱ 附证明

news2024/11/24 7:27:58

题目链接:

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

142. 环形链表 II - 力扣(LeetCode)

141.环形链表

方法思路:快慢指针

代码:

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

        if(!head)
        {
            return false;
        }

        ListNode * slow=head;
        ListNode * fast=head;

        while(fast && fast->next)
        {
            slow=slow->next;
            fast=fast->next->next;
            if(fast==slow)
            {
                return true;
            }
        }

        return false;

    }
};

解析:
        用到了快慢指针,定义两个指针,slow指针和fast指针,令slow一次走一步,fast一次走两步,可以证明只要有环,则fast与slow一定能相遇。

证明:

1.fast一次走两步,slow一次走一步时:

假设一个环形链表如下:

令slow和fast初始都指向链表头结点head

---------------------------------------------------------------------------------------------------------------------------------

slow进环后,fast开始追击slow

---------------------------------------------------------------------------------------------------------------------------------

某一时刻时就会相遇

---------------------------------------------------------------------------------------------------------------------------------fast一次走两步,slow一次走一步,在环内一定可以相遇的证明:

(1).假设当slow刚进入环时,slow与fast距离差为N

(2). 当fast一次走两步,slow一次走一步,则N变为了N-1,每追击一次,slow与fast之间的距离缩小1个距离,则N最终会变为0。则可证明slow与fast一定可以相遇。

2.fast一次走三步,slow一次走一步时:
 

(1).还是假设slow刚进环时,slow 与 fast相遇距离为N。

(2).fast走三步,slow走一步,距离变化为:

                                                N-2  ->  N-4  ->  N-6..........以2递减。

(3).当N是2的倍数时,N最终会变为0,则可以相遇。

(4).当N不是2的倍数时,我们需要设环长为C。N会先变成-1,则fast超过了slow,如图:

        则此时fast与slow的距离成为了C-1,则当C-1为2的倍数时,则slow与fast一定可以相遇。

结论:若N为2的倍数,则一定可以相遇。若N不是2的倍数时,当C为奇数时(C-1为偶数),一定可以相遇。

总结:

1.N是偶数,第一轮就追上了。

2.N是奇数,第一轮会错过,距离变为C-1

        (1).如果C-1是偶数,下一轮就追上了。

证明是否永远追不上:

即N为奇数,C-1也为奇数时,是否存在?

先设环长为C,设当slow刚进环时,走了L距离,fast与slow距离为N,则fast已经在环内转了x圈。

则   slow走的距离:L        fast走的距离:L+x*C+C-N;

又因为fast走的距离是slow的三倍,所以3*L=L+x*C+C-N

                                                                        2*L=(x+1)*C-N

又因为假设N为奇数C为偶数时,则 2*L一定是偶数,则等号右侧也应该为偶数,但是(x+1)*C

为偶数,N为奇数,则右侧为奇数(偶数-奇数),显然出现矛盾,等号左侧一定是偶数,而等号右侧为奇数,所以出现矛盾。N为奇数且C为偶数不成立!!!即一定能追上!

结论:一定能追上

N为偶数时第一轮就追上了。

N是奇数时第一轮追不上,C-1是偶数第二轮就追上。

142.环形链表Ⅱ

方法思路:还是用快慢指针,找到快慢指针在环中相遇的结点,把这个结点存储起来,再令链表头结点和相遇的结点一起向前走,当头结点与相遇结点相遇时的结点,就是环的入口。

代码:

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {

        ListNode * fast=head;
        ListNode * slow=head;

        while(fast && fast->next)
        {
            fast=fast->next->next;
            slow=slow->next;

            if(fast==slow)
            {
                ListNode * next=fast;
                while(next != head)
                {
                    head=head->next;
                    next=next->next;
                }

                return next;
            }

        }

        return NULL;

        
    }
};

证明:

当快指针一次走两次,慢指针一次走一次。

slow与fast相遇时 就证明L=C-N即可

slow 走的路程:L+N

fast  走的路程:L+x*C+N

因为fast的路程是slow的二倍,则2*(L+N)=L+x*C+N

                                                                                        L+N=x*C

                                                                                        L=x*C-N

当x=1时,则L=C-N

当x!=1时, 则由于C是圆环周长,则大于1圈的时候就相当于1圈,转整圈还是会到达meet处。

则可证明L=C-N成立

完结撒花
 

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

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

相关文章

基于uniapp vue3.0 uView 做一个点单页面(包括加入购物车动画和左右联动)

1、实现效果&#xff1a; 下拉有自定义组件&#xff08;商品卡片、进步器、侧边栏等&#xff09;源码 2、左右联动功能 使用scroll-view来做右边的菜单页&#xff0c;title的id动态绑定充当锚点 <scroll-view :scroll-into-view"toView" scroll-with-animation…

vue+element之解决upload组件上传文件失败后仍显示在列表上、自动上传、过滤、findIndex、splice、filter

MENU 前言错误案例(没有用)正确方法结束语 前言 el-upload上传失败后&#xff0c;文件仍显示在列表上。 这个pdf文件上传失败&#xff0c;仍显示在列表&#xff0c;给人错觉是上传成功&#xff0c;所以要把它去掉。 在element中&#xff0c;file-list和v-model:file-list是用于…

Codigger数据篇(中):数据可控性的灵活配置

在数据服务领域中&#xff0c;数据可控性无疑是至关重要的一环。数据可控性不仅关乎数据的安全性和隐私性&#xff0c;更直接影响到数据价值的实现。Codigger&#xff0c;在其数据可控性方面的灵活配置&#xff0c;为用户提供了更加便捷、高效的数据管理体验。 一、自主选择数…

拌合楼管理系统(十八)如何从一个winForm中的事件修改另外一个Form的控件的值

前言&#xff1a; 上篇讲述了如何手工调用海康的车牌识别摄像头进行拍照和识别车牌&#xff0c;我车牌识别的程序在应用的一个窗体&#xff0c;需要去更新另外一个窗体里面的lable中的内容为识别的车牌信息&#xff0c;同时还要写入到另外窗体的datagridview中。 一、实现效果 …

以23年电赛吉林赛区为例,如何避免冤假错案?再谈无人机赛题中不让使用机载计算机的问题!!!

有同学反馈吉林赛区在无人机赛题中使用树莓派后不被允许测评&#xff0c;由于缺少同省样本支撑&#xff0c;并且吉林省G题无人机获得国奖仅有一组&#xff0c;所以仅根据特定情况做回复&#xff0c;不代表任何组委会立场&#xff0c;因为按照该用户表述&#xff0c;自己没有任何…

【HTTP协议】了解http需要学习哪些内容

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是超文本传输协议&#xff0c;互联网上应用最广泛的一种协议&#xff0c;它负责在客户端和服务器之间传输数据。本文将从HTTP协议的基本原理、请求-响应模型、常见特性以及应用场景等方面进行总结。 1. HTTP基本原理 …

【云原生】Docker 实践(一):在 Docker 中部署第一个应用

Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用 1.使用 YUM 方式安装 Docker2.验证 Docker 环境3.在 Docker 中部署第一个应用3.1 小插曲&#xff1a;docker pull 报 missing signature key 错误3.2 重新安装 Nginx 1.使用 YUM 方式安装 Docker…

极目楚天 共襄星汉 | 同元软控受邀参加2024年中国航天大会

4月23日至26日&#xff0c;2024 年中国航天大会&#xff08;CSC2024&#xff09;在湖北省武汉市成功举办。大会由中国宇航学会和中国航天基金会联合主办&#xff0c;以“极目楚天 共襄星汉”为主题&#xff0c;汇聚国内外航天领域知名专家、学者、管理者&#xff0c;深入探讨航…

数字IC后端先进工艺设计实现之TSMC 12nm 6Track工艺数字IC后端实现重点难点盘点

大家知道咱们社区近期TSMC 12nm ARM Cortexa-A72(1P9M 6Track Metal Stack)已经开班。这里小编要强调一点:不要认为跑了先进工艺的项目就会很有竞争力&#xff01;如果你仅仅是跑个先进工艺的flow&#xff0c;不懂先进工艺在数字IC后端实现上的不同点&#xff0c;为何有这样的不…

2024年十款开源测试开发工具推荐(自动化、性能、混沌测试、造数据、流量复制)

今天为大家奉献一篇测试开发工具集锦干货。在本篇文章中&#xff0c;将给大家推荐10款日常工作中经常用到的测试开发工具神器&#xff0c;涵盖了自动化测试、性能压测、流量复制、混沌测试、造数据等。 1、AutoMeter-API 自动化测试平台 AutoMeter 是一款针对分布式服务&…

MT3420B 航天民芯代理 1.5MHZ 2A 同步降压转换器 6V输入

深圳市润泽芯电子有限公司为航天民芯一级代理技术支持 欢迎试样~Tel&#xff1a;18028786817 简介 MT3420B是一个1.5MHz恒定频率&#xff0c;电流模式降压转换器。它是理想的便携式设备&#xff0c;需要非常大电流的单电池锂离子电池&#xff0c;同时在峰值负载条件下仍达到超…

HR是“打手”?

在刚过去的上海公开课上&#xff0c;有一位学员在课间问了我个问题&#xff0c;他说“感觉HR更像是个打手&#xff0c;不知李老师怎么看&#xff1f;”基于我在现场与他交流的内容&#xff0c;我总结成这篇文章吧。 这位学员的问题&#xff0c;表他了他对HR这个岗位的负面感受…

机器学习每周挑战——客户流失数据预测

# 字段 说明 # RowNumber 每行数据的唯一标识符。 # CustomerId 客户的唯一标识符。 # Surname 客户的姓氏&#xff08;出于隐私考虑&#xff0c;请对这些数据进行匿名处理&#xff09;。 # CreditScore 客户在数据收集时的信用评分。 # Geography 客户所在的国…

文件分块+断点续传 实现大文件上传全栈解决方案(前端+nodejs)

1. 文件分块 将大文件切分成较小的片段&#xff08;通常称为分片或块&#xff09;&#xff0c;然后逐个上传这些分片。这种方法可以提高上传的稳定性&#xff0c;因为如果某个分片上传失败&#xff0c;只需要重新上传该分片而不需要重新上传整个文件。同时&#xff0c;分片上传…

React的路由

1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候&#xff0c;path 对应的组件会在页面中进行渲染 2. 创建路由开发环境 # 使用CRA创建项目 npm create-react-app react-router-pro# 安装最新的ReactRouter包 npm i react-ro…

AI图书推荐:将 ChatGPT和Excel融合倍增工作效率

《将 ChatGPT和Excel融合倍增工作效率》&#xff08; Hands-on ChatGPT in Excel. Enhance Your Excel Workbooks&#xff09;由Mitja Martini撰写&#xff0c;旨在教授读者如何将ChatGPT与Excel结合使用&#xff0c;以提升工作效率和创造AI增强的Excel工具。它还提供了Excel中…

「中标喜报」合众致达中标深圳安居乐寓智能水电表供货及安装项目

2024年4月25日&#xff0c;深圳合众致达科技有限公司(以下简称“我司”)成功中标安居乐寓2023盐田区保障性租赁住房改造提升项目的水电表供货与安装工程(二次)项目&#xff0c;此次中标标志着我司在城中村公寓出租房能源计费领域的专业实力及市场竞争力得到了进一步的认可。 我…

uniapp视频播放器(h5+app)

关于uniapp视频播放器遇到的一些问题&#xff0c;mark下。 中途遇到了很多问题&#xff0c;如果有相同的伙伴遇到了类似的&#xff0c;欢迎交流 官方的video播放器在app上不友好&#xff0c;有以下功能不支持。 loadedmetadata、controlstoggle不支持导致只能手写控制层。 不…

Pycharm远程连接实验室服务器Conda环境配置

如何配置Pycharm和远程服务器 这类博客较多&#xff0c;参考内容 https://blog.csdn.net/fengbao24/article/details/125515542 Python解释器选择&#xff08;conda3&#xff09; 1. Settings -> Add Interpreter -> On SSH 注意&#xff0c;这里的SSH需要在你把远程…

【TCP:可靠数据传输,快速重传,流量控制,TCP流量控制】

文章目录 可靠数据传输TCP&#xff1a;可靠数据传输TCP发送方事件快速重传流量控制TCP流量控制 可靠数据传输 TCP&#xff1a;可靠数据传输 TCP在IP不可靠服务的基础上建立了rdt 管道化的报文段 GBN or SR 累计确认&#xff08;像GBN&#xff09;单个重传定时器&#xff08;像…