力扣——环形链表问题

判断链表是否有环以及入环的第一个节点

  • 前言
  • 判断链表是否有环
  • 找到入环的第一个节点

前言

    大家好,前段时间,熊二学习了关于环形链表相关的问题,以下是我的见解,希望能够帮助你们呀!

判断链表是否有环

给定一个链表,判断链表中是否有环。OJ链接
环形链表
方法:快慢指针
思路:

  如果没有环,快指针永远比慢指针快,,在这个追击问题中,慢指针永远追不上快指针,那么快慢指针永远都不会相遇,说明它们在一条直线上跑 ,故没有环。
在这里插入图片描述
  如果有环,假设快指针是慢指针速度的两倍,那么快指针一定比慢指针先进入环,等慢指针开始进入环,这个追及问题就开始了,在同一个环中,快指针和慢指针速度不一至,快指针一定会追上慢指针的,当快指针=慢指针时,表明一定有环。
在这里插入图片描述

代码如下:

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

拓展问题:
1.为什么会相遇,有没有可能错过,永远追不上,请证明。

假设slow进环时,fast跟slow的距离是N,fast追击slow的过程距离变化如下:
N-1
N-2

3
2
1
0
每追击一次,fast与slow的距离是-减1,最后一定会追上
在这里插入图片描述

2.slow一次走1步,fast走3步,4步,5步,n步,一定能追上吗?请证明。

假设slow进环时,fast跟slow的距离是N,fast追击slow的过程距离变化如下:
若N为偶数         若N为奇数
N-2                 N-2

N-4                 N-4
…                  …
4                    3
2                    1
0                    1
追上了             错过了,进入新一轮的追击
                   新一轮,距离变成了C-1
                   C-1为偶数,下一轮就追上了
                   C-1为奇数,下一轮会不会追上呢?
在这里插入图片描述
关于C-1为奇数,下一轮会不会追上呢?

我们暂且把问题变换成,如果同时存在N是奇数且C是偶数,fast会不会追上slow?

假设slow进环时,fast跟slow的距离是N
slow走的距离:L
fast走的距离:L+xC+C-N;
slow进环时,假设fast已经在环里面转了x圈
fast走的距离是slow的3倍
3
L =L+ xC +C-N;
化简:
2
L= (x+1)*C+C-N;
偶数 =(x+1)*偶数-奇数
如果同时存在N是奇数且C是偶数,
偶数 =(x+1)*偶数-奇数 ,不存在 ,所以,永远追不上不成立
总结:一定能够追上

找到入环的第一个节点

给定一个链表,返回链表开始入环的第一个结点。 如果链表无环,则返回 NULL。OJ链接
在这里插入图片描述

运动过程:
在这里插入图片描述

首先,我们指定快指针fast,慢指针slow,快指针以慢指针两倍的速度走(两指针同时走)。

当快指针进环时,慢指针还在追赶(红色)
当慢指针进环时,快指针已经在环里面(蓝色),这时,不久后,快指针就会追上慢指针(在这个环中)
当快指针追上慢指针时(紫色),我们从中寻找等式。

设AB=L,BC=N,环的总长度为C,寻找关系
slow的路程:L+C-N
fast的路程:L+XC+C-N
fast是slow路程的两倍:2
(L+C-N)=L+X*C+C-N;
继而得出:L=(X-1)*C+N;
因为C是圆环的长度,所以fast不管是多走X-1圈,还是多走了1圈,都没有区别,最后得出:L=N这个关键条件

代码如下:

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

在这里插入图片描述

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

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

相关文章

如何在一个月内快速学习掌握大模型

原本给自己的是一个月时间,通过梳理之后我自信的认为不需要一个月,两周即可,相较于其他技术,大模型应用的门槛要低得多。 先明确你想要深入到哪一层 1、基础设施层:了解即可,关注NVIDIA和超大规模厂商的最…

[自动化测试:Selenium]:环境部署和Webdriver的使用

文章目录 修改安装源打开Python Packages。点击梅花按钮。在弹出的对话框中,填入Name(随便填),Repository URL,选择下列的源,一般先选择清华源按OK确认。配置完成 安装seleniumFile→Settings→Project&…

word删除空白页 | 亲测有效

想要删掉word里面的末尾空白页,但是按了delete之后也没有用 找了很久找到了以下亲测有效的方法 1. 通过鼠标右键在要删除的空白页面处显示段落标记 2. 在字号输入01,按ENTER(回车键) 3.成功删除了!! PS…

【ArcGIS Pro实操第八期】绘制WRF三层嵌套区域

【ArcGIS Pro实操第八期】绘制WRF三层嵌套区域 数据准备ArcGIS Pro绘制WRF三层嵌套区域Map-绘制三层嵌套区域更改ArcMap地图的默认显示方向指定数据框范围 Map绘制研究区Layout-布局出图 参考 本博客基于ArcGIS Pro绘制WRF三层嵌套区域,具体实现图形参考下图&#x…

两性离子水凝胶助力微针传感器:稳定灵敏的监测神器

大家好!今天我要向大家介绍一项关于生物相容性核壳微针传感器的研究——《Biocompatible Core–Shell Microneedle Sensor Filled with Zwitterionic Polymer Hydrogel for Rapid Continuous Transdermal Monitoring》发表于《ACS Nano》,该传感器填充两…

爬虫结合项目实战

由于本人是大数据专业,所以准备的是使用pycharm工具进行爬虫爬取数据,然后实现一个可视化大屏 参考项目: 1.医院大数据可视化最后展示 2. 大数据分析可视化系统展示 代码包:

自由学习记录(13)

服务端常见的“资源” 在服务端,常见的“资源”指的是服务端提供给客户端访问、使用、处理或操作的各种数据和功能。根据不同类型的服务和应用场景,服务端的资源种类可以非常广泛。以下是一些常见的服务端资源类型: 1. 文件和静态资源 网页…

LSP的建立

MPLS需要为报文事先分配好标签,建立一条LSP,才能进行报文转发。LSP分为静态LSP和动态LSP两种。 静态LSP的建立 静态LSP是用户通过手工为各个转发等价类分配标签而建立的。由于静态LSP各节点上不能相互感知到整个LSP的情况,因此静态LSP是一个…

阿里云云盘在卸载时关联到PHP进程,如何在不影响PHP进程情况下卸载磁盘

1.问题: 在使用umount /dev/vdc1 卸载磁盘时,提示如下,导致无法在Linux系统下卸载磁盘 umount /dev/vdc1 umount: /var/www/html/*/eshop/IFile3: target is busy.(In some cases useful info about processes that usethe device is found…

管家婆财贸ERP BB014.销售按库存选存货

最低适用版本: 财贸系列 22.8 插件简要功能说明: 销售按库存选存货插件,多元化价格跟踪体系用户根据存货+仓库自设仓库协议价仓库协议价支持手工或通过售价生成便捷录入销售单开单,无需选择客户,支持按存货查询库存余额及仓库协议价,选中存货即可将存货默认出库单位一级…

linux—基础命令及相关知识

1.0Linux的哲学思想(优势) 1、一切都是一个文件,一切硬件设备包括硬件接口都可以以文件形式显示 2、系统小型,轻量级,300个包(不装桌面的情况下) 3、避免令人困惑的用户界面(图形…

在 Spring 中使用 @EhCache 注解作为缓存

文章目录 项目概况项目设置一个简单的 RESTful Web 服务Spring 整合 EhCache第 1 步:更新依赖项以使用 EhCache Spring 注解第 2 步:设置自定义缓存管理器第 3 步:配置 EhCache第 4 步:测试缓存 刷新缓存总结推荐阅读文章 EhCache…

Linux系统基础-进程间通信(3)_模拟实现匿名管道

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(3)_模拟实现匿名和命名管道 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论&a…

docker入门(三)自定义部署docker镜像

docker系列d​​​​​​​docker入门(一)安装及镜像命令_docker国内源-CSDN博客文章浏览阅读1.5k次,点赞44次,收藏12次。注意:是强依赖Linux环境,即便在windows上部署Docker其本质也都是先安装一个虚拟机&…

SpringBoot3.x和OCR构建车牌识别系统

本专题旨在展示 OCR 技术与 SpringBoot3.x 框架结合的广泛应用。我们会深入探讨它在医疗、金融、教育、交通、零售、公安等多个领域的现实应用。每个应用场景都会提供详细的实例、面临问题的分析与解决策略,以帮助您深入理解 OCR 技术在实践中的关键作用。让我们一同…

糖果——差分约束 + 正环判定及其优化(手搓栈 + 标记法)

题目 思考 这里转为判定负环可以是可以&#xff0c;但是不能用超级源点了&#xff08;改为把节点全部压入&#xff09;&#xff0c;因为按照题目条件&#xff0c;建立的应该是各个节点指向超级源点的有向边&#xff0c;这显然破坏了超级源点的功能 代码 #include <bits/st…

ArcGIS002:软件自定义设置

摘要&#xff1a;本文详细介绍安装arcgis10.2后软件自定义设置内容&#xff0c;包括工具条的启用、扩展模块的启用、如何加载项管理器、快捷键设置、样式管理器的使用以及软件常规设置。 一、工具条的启用 依次点击菜单栏【自定义】->【工具条】&#xff0c;根据工作需求勾…

某ai gpt的bug

某ai gpt的bug 背景 遇到了一个奇怪的现象&#xff1a; 输入内容 2024-10-21 10:09:31,052 ERROR o.a.j.t.JMeterThread: Test failed! java.lang.IllegalArgumentException:输出结果

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型&#xff08;train.py&#xff09;2. 模型定义&#xff08;model.py&#xff09;3. 测试模型和可视化&#xff08;test.py&#xff09;使用说明模型调整结论 引言 在金融领域&#xff0c;股票价格预测是一个重要且具有挑战性的任务。随着深度学习…

即时通讯增加Redis渠道

情况说明 在本地和服务器分别启动im服务&#xff0c;当本地发送消息时&#xff0c;会发现服务器上并没有收到消息 初版im只支持单机版&#xff0c;不支持分布式的情况。此次针对该情况对项目进行优化,文档中贴出的代码非完整代码&#xff0c;可自行查看参考资料[2] 代码结构调…