环链表寻找交点

目录

1.题目描述和出处

2.分析

3.代码


1.题目描述和出处

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

描述很简单,寻找交点,找到则返回交点,找不到返回空。


2.分析

如图:(b表示环的长度)

本题要使用快慢指针的思想。

定义一个快指针f,一个慢指针s。快指针每次从头走两步,慢指针从头走一步。若存在环,则快指针一定能追上慢指针。

那么,现在让快慢指针第一次出发:

设f走了2L的距离,s走了L的距离(快指针每次从头走两步,慢指针从头走一步)。

当f和s相遇时:表示f套圈追上了s,假设套了n圈则有 2L - L = nb -> L = nb;

若从起点出发到达交点的距离可以用a+nb来表示,而s刚好走了nb的距离,也就是说再让s走a的距离就到达了交点,但是我们并不知道a的值。

我们第二次需要让快指针重新出发:

此时,我们让快指针回到起点并且每次直走一步和慢指针保持一致。

那么当他们第二次相遇的时候一定就是交点位置。

原因:当f走了a长度的路程时,这时b走的距离为nb+a。

我们有结论:a+nb表示达到交点,而n取0就是a。

也就是他们同时到达了交点,此时返回任意一个就是最终结果。


3.代码

ListNode *detectCycle(ListNode *head) {//快慢指针ListNode* f=head;ListNode* s=head;while(true){//当快指针可以找到末尾时//表示没有环的存在if(f == nullptr || f->next == nullptr)return nullptr;//快指针走俩步 慢指针走一步f=f->next->next;s=s->next;if(f == s)break;}//从头开始重新找一遍,相遇的位置即为交点f=head;while(true){if(f == s)break;f=f->next;s=s->next;}return f;}

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

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

相关文章

springboot3.x集成nacos踩坑,并实现多环境配置

一、nacos安装部署 springboot3.x集成Nacos首先需要将Nacos从1.x升级到2.x,建议直接安装2.x版本,手动将1.x的配置信息迁移到2.x中,先并行一段时间,待全部迁移完成稳定运行之后再停掉1.x,升级和安装、操作请查看官方文…

Github——个人项目的二维码免费生成

一、安装 myqr 库 pip install myqr二、编写python代码 # 网站二维码免费生成 from MyQR import myqrmyqr.run(words"https://github.com/chen-si-jia/Trajectory-Long-tail-Distribution-for-MOT")三、python运行此代码,即可在同级目录生成二维码

C语言深入学习 --- 5.动态内存管理

文章目录 第五章 动态内存管理1.存在动态内存分配的意义2.动态内存函数2.1 malloc和free2.2 calloc2.3 realloc 3.常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free释放3.4 使用free释放一块内存开辟内存的一部分3.5 对…

DailyNotes个人笔记管理工具

DailyNotes 是记录笔记和跟踪任务的应用程序,使用markdown进行编辑 部署 下载镜像 docker pull m0ngr31/dailynotes创建目录并授权 mkdir -p /data/dailynotes/config_dir chmod -R 777 /data/dailynotes启动容器 docker run -d --restart always --name mynot…

Java中的数据压缩和存储技术:Zip、GZip与Brotli

第1章:引言 大家好,我是小黑,作为一名Java程序员,在业务开发中,常常面临着一个问题:如何高效地处理和传输这些庞大的数据呢?答案就在于数据压缩技术。数据压缩,简而言之&#xff0c…

SpringBoot+Ajax+redis实现隐藏重要接口地址

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 文章目录 …

九型人格测试,8号领袖型人格的职业分析

8号人格,也叫领袖型人格,在九型人格中间,是一种天生领导的存在。他们生性开朗,能够和其他人建立良好的关系,为人不拘小节,遇强则强,坚守心中的理想和正义。不喜欢被人控制,喜欢自己当…

Java并发-并发模型

可以使用不同的并发模型来实现并发系统。一并发模型指定的系统协作线程如何完成他们给予的任务。不同的并发模型以不同的方式拆分任务,线程可以以不同的方式进行通信和协作。本并发模型教程将更深入地介绍撰写本文时(2015年至2019年)使用的最…

【Kotlin】Lambda表达式

1 常规调用 Lambda 表达式总结 中对 Java 的 Lambda 表达式进行了总结,本文将对 Kotlin 中的 Lambda 表达式进行总结。 1.1 无参函数 fun main() {var myFun: () -> Unit {println("test")}myFun() // 打印: test } 以上代码等价于: f…

【每日一问】Cookie、Session 和 Token 有什么区别?

Cookie、Session 和 Token 通常都是用来保存用户登录信息的技术,但三者有很大的区别,简单来说 Cookie 适用于简单的状态管理,Session 适用于需要保护用户敏感信息的场景,而 Token 适用于状态无关的身份验证和授权。 具体来说&…

大模型时代,华为与中软国际携手“打通AI落地应用最后一公里”

文 | 智能相对论 作者 | 叶远风 大模型驱动千行百业智能化变革已经成为广泛共识,下一步的问题是,企业要如何更好地推进? 近日,“2024中关村论坛系列活动——第二届北京人工智能产业创新发展大会”在北京国家会议中心成功举办&a…

每天一个数据分析题(一百九十四)

假如HS银行想进行用户购买理财产品情况研究的样本量确定和样本选取方法,下列说法哪些是正确的? A. 当我们不知道用户对某款理财产品是否感兴趣的具体比例时,通常假设 p0.5 来计算样本量。 B. 样本量的计算中,e 代表了希望对真值…

const shared_ptr<int>和shared_ptr<const int>的区别

const shared_ptr 和 shared_ptr 在 C 中表示两种不同的概念,尽管它们都与智能指针和常量性有关。下面是它们之间的主要区别: const shared_ptr 当你声明一个 const shared_ptr,你实际上是在声明一个指向 int 的智能指针,而这个…

零基础学习JS--基础篇--数字和日期

数字 javascript中常用的四种数字进制:十进制、二进制、八进制和十六进制。 这些进制都具有通用性,如果你有语言基础则可以略过,下面说一下指数形式。 指数形式: 0e-5 // 0 0e5 // 0 5e1 // 50 175e-2 // 1.75 1e3 …

MacOS终端命令行死循环

一、原因 (在vim ~/.bash_profile写了source ~/.bash_profile) 二、解决办法 1、contrl c 手动停止死循环 2、vim ~/.bash_profile (使用 Vim 编辑器打开 .bash_profile 文件) 3、键盘输入i进入编辑模式,编辑完成…

如何建站?

1. 选择域名:短且易记,与网站内容相关。 2. 购买主机:选择稳定、安全且价格合适的主机服务商。 3. 选择网站程序:根据需求选择网站类型,如博客、企业站、电商。 4. 设计网站:确定布局、导航、色彩&#xff…

[剑指offer] 数组中重复的数字

目录 1. 题目描述 2. 代码实现 1. 题目描述 📚 题目描述:在一个长度为 的数组里的所有数字都在 0 到 n−1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的数组…

yudao-cloud 学习笔记

前端代码 浏览器打开 https://cloud.iocoder.cn/intro/ F12 执行代码 var aaa $(".sidebar-group-items").find("a"); var ll[]; var tt[]; for(var i0;i<aaa.length;i ){ ll.push("https://doc.iocoder.cn" $(aaa[i]).attr("href&quo…

云计算 3月4号 (自配本地和远程yum源)

自建yum源 本地源 一、使用本地的镜像文件来制作yum源(做完记得删除) 1、挂载dvd镜像或将镜像拷贝到机器中 mkdir /yum-repo mount /dev/cdrom /yum-repo # 如果我们在设置中挂载了镜像使用这个方法 mount 镜像的路径 /yum-repo # 如果我们拷贝镜像到了系统中&#xff0c;可…

Docker 构建前端项目生成镜像

一、使用 Docker 构建前端项目镜像&#xff1a; 下载安装 Docker Desktop准备一个前端项目&#xff08;vue/react&#xff09;在项目的根目录新建名为 Dockerfile 的文件 # 设置基础镜像 FROM nginx:latest# 复制项目文件 COPY dist/ /usr/share/nginx/html/# 配置Nginx COPY…