[LeetCode]-160. 相交链表-141. 环形链表-142.环形链表II-138.随机链表的复制
目录
160.相交链表
题目
思路
代码
141.环形链表
题目
思路
代码
142.环形链表II
题目
思路
代码
160.相交链表
160. 相交链表 - 力扣(LeetCode)
https://leetcode.cn/problems/intersection-of-two-linked-lists/description/
题目
给你两个单链表的头节点
headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。图示两个链表在节点
c1开始相交:
题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
示例:

输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,6,1,8,4,5], skipA = 2, skipB = 3
输出:Intersected at '8'
解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。
从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,6,1,8,4,5]。
在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。
— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。换句话说,它们在内存中指向两个不同的位置,而链表 A 和链表 B 中值为 8 的节点 (A 中第三个节点,B 中第四个节点) 在内存中指向相同的位置。
思路
先分别从两个单链表A、B的头节点开始遍历,分别计算出两个单链表的长度lenA、lenB,由于相交节点后面部分链表是共用的,所以长度差只存在于相交节点前面部分,因此,我们可以让较长的链表(可以先假设A长)先往后遍历差距步abs(lenA-lenB),再让A、B链表同时向后遍历(longlistA=longlistA->next、shortlistB=shortlistB->next),当A、B遍历到相同的节点时,即longlistA==shortlistB时,同时到达相交起始节点,返回longlist或者shortlist均为相交起始节点。
图示👇

代码
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode* curA=headA;struct ListNode* curB=headB;int lenA=1,lenB=1;while(curA->next){curA=curA->next;lenA++;}while(curB->next){curB=curB->next;lenB++;}if(curA!=curB)return NULL;int grp=0;
if(lenA>lenB)
grp=lenA-lenB;
else
grp=lenB-lenA;struct ListNode* longlist=headA,* shortlist = headB;if(lenA<lenB)
{longlist=headB;shortlist=headA;
}
//长的先走差距步
while(grp--)
{longlist=longlist->next;
}
while(longlist!=shortlist)
{longlist=longlist->next;shortlist=shortlist->next;
}
return longlist;}
141.环形链表
141. 环形链表 - 力扣(LeetCode)
https://leetcode.cn/problems/linked-list-cycle/description/
题目
给你一个链表的头节点
head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪
next指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回
true。 否则,返回false。
示例:

输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。
思路
利用快慢指针法,在头节点创建两个指针fast和slow,从头节点向后分别开始遍历,但是fast一次走两步(fast=fast->next->next),slow一次走一步(slow=slow->next),如果链表中有环,没有指向NULL的节点,fast和slow进入环后会无限循环遍历下去,因为fast遍历速度是slow的两倍,在环中,fast和slow总会遍历到同一节点,我们就可以添加一个跳出条件,当fast和slow相等时(fast==slow),证明链表中有环,返回true。
图示👇

代码
bool hasCycle(struct ListNode *head) {struct ListNode* slow=head,* fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;if(fast==slow)return true;}return false;
}
142.环形链表II
142. 环形链表 II - 力扣(LeetCode)
https://leetcode.cn/problems/linked-list-cycle-ii/description/
题目
给定一个链表的头节点
head,返回链表开始入环的第一个节点。 如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪
next指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。如果pos是-1,则在该链表中没有环。注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。
示例:

输入:head = [3,2,0,-4], pos = 1 输出:返回索引为 1 的链表节点 解释:链表中有一个环,其尾部连接到第二个节点。
思路
遇到环形链表问题,我们可以先考虑用快慢指针求出相遇点,在这道题中,我们要求出链表入环的第一个节点,我们知道链表成环需要尾节点指向链表中的任意节点,被指向节点就有了两个指向它的节点,我们可以利用求相交节点的方法求入环的第一个节点,类似于上面相交链表题,为了创造条件,我们可以断开相遇点,创建一个新节点newhead,和原节点head,两个节点带入上面求相交节点的题目中,就能求出入环第一个节点了。

代码
//求相交节点的函数
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode* curA=headA;struct ListNode* curB=headB;int lenA=1,lenB=1;while(curA->next){curA=curA->next;lenA++;}while(curB->next){curB=curB->next;lenB++;}if(curA!=curB)return NULL;int grp=0;
if(lenA>lenB)
grp=lenA-lenB;
else
grp=lenB-lenA;struct ListNode* longlist=headA,* shortlist = headB;if(lenA<lenB)
{longlist=headB;shortlist=headA;
}
//长的先走差距步
while(grp--)
{longlist=longlist->next;
}
while(longlist!=shortlist)
{longlist=longlist->next;shortlist=shortlist->next;
}
return longlist;
}struct ListNode *detectCycle(struct ListNode *head) {struct ListNode* fast,* slow;fast=slow=head;while(fast&&fast->next){fast=fast->next->next;slow=slow->next;if(fast==slow){struct ListNode* meet=fast;//断开相遇点struct ListNode* newhead=meet->next;meet->next=NULL;//找相交节点return getIntersectionNode(newhead,head);}}return NULL;
}相关文章:
[LeetCode]-160. 相交链表-141. 环形链表-142.环形链表II-138.随机链表的复制
目录 160.相交链表 题目 思路 代码 141.环形链表 题目 思路 代码 142.环形链表II 题目 思路 代码 160.相交链表 160. 相交链表 - 力扣(LeetCode)https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 题目 给你两个…...
聊一聊关于手机Charge IC的电流流向
关于手机Charge,小白在以前的文章很少讲,一是这部分东西太多,过于复杂。二是总感觉写起来欠缺点什么。但后来想一想,本是抱着互相学习来写文章的心理态度,还是决定尝试写一些。 关于今天要讲的关于手机Charge的内容&a…...
【k8s】pod调度——亲和,反亲和,污点,容忍
官方网址:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ 一、亲和性 (1)节点亲和性 pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution:软策略 p开头 ●requiredDuri…...
分享者 - 携程旅游创作者搬砖项目图文教程
大家好!携程这个出行旅游平台相信大家都不陌生吧。 每天都有大量的旅客在里面浏览攻略,寻找灵感和旅游建议。 那么,我们的项目就是把一些优质的小红书平台上的旅游攻略或作品,经过处理后搬运到携程平台上发布。 这个项目如何操作呢…...
vite配置.env环境变量文件,开发环境,测试环境,预发布环境,生产环境
在vue2,用的vue-cli脚手架搭建项目,cli用的是webpack 当你yarn dev时,命令会启动package.json中的dev键名的值,也就是后面的一行命令 这时浏览器会去识别你是开发环境还是生产环境,其实windows是不能直接识别你是开发…...
0003Java安卓程序设计-springboot基于Android的学习生活交流APP
文章目录 **摘** **要**目 录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 🐧裙:776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合,利用java技术建设学习生活交流APP&…...
Java8 时间字符串校验是否为对应的日期格式
时间字符串格式校验 严格模式下校验日期字符串 public static boolean isDateStrict(String dateStr, String pattern) {try {DateTimeFormatter formatter new DateTimeFormatterBuilder().appendPattern("yyyyMMdd").parseDefaulting(ChronoField.ERA, 1).toFor…...
2023.11.6联赛总结
T 1 T1 T1让你构造出一个不超过 40 ∗ 40 40*40 40∗40的矩阵,满足连续的 r y x ryx ryx有 n n n个。 一开始我想着直接放 r y x ryx ryx,这个做法有 80 80 80分,但是打挂了,再调了将近1个小时后,选择先跳过ÿ…...
UE5——源码阅读——9——引擎预初始化
加载项目模块 判断项目是否是有意义的 准备读取模块 对应着错误信息 广播 加载插件模块 根据配置是否已经启用插件 开始遍历所有的插件 尝试读取插件 检查上一次完成的加载阶段是否大于当前的加载阶段 通知加载完成...
报错Could not resolve placeholder ‘driver‘ in value “${driver}“
这是我的报错: 原因是我的applicationContext.xml文件加载properties文件径错误: 应该把路径改成这样就可以了:...
Rust编程基础核心之所有权(下)
1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据,而不仅仅是栈上的数据,可以使用一个叫做 clone 的通用函数。 看下面的代码…...
高防CDN:企业网络安全的坚强后盾
随着互联网的快速发展,企业的网络面临着越来越多的安全威胁。在这种背景下,高防CDN(Content Delivery Network)已经成为了企业网络安全的坚强后盾。本文将理性分析高防CDN对于企业发展的影响,强调其在维护网络稳定性、…...
gitlab 设置 分支只读
一,设置master分支只读, 并且只有Maintainers 拥有合并权限。 二,设置成员权限 改为developer 三,邀请成员 点击右上角 Invite Members...
Spring Boot 面试题——常用注解
目录 Spring Bean将一个类声明为 Bean自动装配 Bean声明 Bean 的作用域 前端后传值处理常见的 HTTP 请求类型读取配置文件定时任务全局 Controller 层异常处理 Spring Bean 将一个类声明为 Bean Component:通用的注解,可标注任意类为 Spring 组件。如果…...
RabbitMQ(高级特性) 设置队列所有消息存活时间
RabbitMQ可以设置消息的存活时间(Time To Live,简称TTL),当消息到达存活时间后还没有被消费,会被移出队列。RabbitMQ可以对队列的所有消息设置存活时间,也可以对某条消息设置存活时间。 Configuration pub…...
刷题学习记录
[MRCTF2020]PYWebsite1 进入环境,页面就提示要购买flag,不要想着购买,因为扫码后提示的是一个文本 “拜托!你不会真的想PYflag吧,这样可是违规的!再好好分析一下界面代码吧” 查看网页源码,发现…...
WPF中依赖属性及附加属性的概念及用法
完全来源于十月的寒流,感谢大佬讲解 依赖属性 由依赖属性提供的属性功能 与字段支持的属性不同,依赖属性扩展了属性的功能。 通常,添加的功能表示或支持以下功能之一: 资源数据绑定样式动画元数据重写属性值继承WPF 设计器集成 …...
Golang爬虫封装
引言 爬虫是一种自动化地从网页中提取信息的程序,它在现代互联网的数据获取和分析中扮演着重要的角色。Golang作为一门强大的编程语言,也提供了丰富的工具和库来实现爬虫功能。在本文中,我们将探讨如何使用Golang来封装一个灵活、高效的爬虫…...
技术分享 | 抓包分析 TCP 协议
TCP 协议是在传输层中,一种面向连接的、可靠的、基于字节流的传输层通信协议。 环境准备 对接口测试工具进行分类,可以如下几类: 网络嗅探工具:tcpdump,wireshark代理工具:fiddler,charles&a…...
基于前馈神经网络完成鸢尾花分类
目录 1 小批量梯度下降法 1.0 展开聊一聊~ 1.1 数据分组 1.2 用DataLoader进行封装 1.3 模型构建 1.4 完善Runner类 1.5 模型训练 1.6 模型评价 1.7 模型预测 思考 总结 参考文献 首先基础知识铺垫~ 继续使用第三章中的鸢尾花分类任务,将Softm…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

