求链表是否有环和第一个交点

求两个单链表的交点 这个面试经常会碰到的题目,判断两个单链表是否相交。个人理解的也不是很深,零零散散的从网上找答案,并把所偶看到的整理了一下,希望对大家有帮助。 判断两个单链表是否相交共有三种情况: 1,两个单链表都没有环。 2,两个单链表中 一个有环,一个没有环。 3,两个链表都有环。 看第一种情况,连个单链表相交,只能是y型相交,不可能是x型相交,理由如下,有两个链表,La,Lb,他们的交点设为p吧,假 阅读详情

这道题做起来简单,但是证明比较麻烦。自己的证明很可能有错误,还望指正。

 

一 是否有环

(1)用追击法,一个指针每次前进1步,另一个指针每次前进2步。

设链表中不包括环的长度为L1,环的长度为L2.

假设走s步之后相交,等价于   式(1)(s-L1)mod L2 = (2s-L1)mod L2有解。即s步之后相交<=>)(s-L1)mod L2 = (2s-L1)mod L2有解

由式(1)得到,n* L2+p=s-L1 (2)

                           m*L2+p=2s-L1 (3)

由(2)(3)得到 (m-n)L2=s (4)

由于s是可变的,上式显然有解。

算法为:一个指针每次前进1步,另一个指针每次前进2步。每次都对比,如果相同则表明相遇,如果到链尾则退出说明没相遇。

 

(2)而且,我们可以证明在一圈内即可追上。即算法复杂度为O(n)。

当L2>=L1,令s=(L1+k)=L2,保证式子(4)有解

 

 

当L1>L2,s=(L1+k)=n1 * L2,我们可以知道K可以小于L2(取K=L2-L1modL2)

 

 

二 求第一个交点

根据式子(4)=> (m-n-1)L2+L2=s => (m-n-1)L2+ P1+P2=L1+P1 <=> (m-n-1)L2+P2=L1

             (P1为定义第一个相交点到追击相遇点的长度,P2为相遇点到第一个相交点的长度,即P1+P2=L2)

这个式子表明链表中不包括环的长度 等于 相遇点到第一个相交点的长度加上环的长度的整数倍。

则算法为:一个指针从相遇点出发,一个指针从链表头开始,而第一次相遇的点即为第一个相交点。

 

求单链表交点 本文首发在我的个人博客:https://jlice.top/p/7qhfm/。欢迎大家前去参观,么么哒~ 题目 今天面试时,面试官问了这样一个问题:两个单链表相交,怎么求交点。所谓相交,就是两个节点的next指针相同。 简单解法 一个简单的思路是:分别遍历这两个链表,并将这两个链表的节点分别保存到两个列表里,然后同步逆序遍历这两个列表,当出现不相同的元素时,则下一个元素就是这两个链表的交... 阅读详情

相关推荐

求相交链表的交点

若链表相交的话,求取他们的交点??? 首先看看链表相交的情况,如图: 解决这个问题的方法很多,下面我们介绍两种常见的方法: 方法一:   假设现在是两条不带环的链表相交,如图:   分别统计两条链表的长度s1和s2,假设s1大于s2,则我们让head1先走上s1-s2步,让后再让head2也出发,则它们的相遇点就是交点。

Sunnylunch-blog 1488

链表噩梦题之一:2条链表相交问题,链表可能有环,也可能无环,求交点

1)链表噩梦题有2个:第一个就是本题,链表的交点问题,第二个就是约瑟夫环问题,找活下来那个人最初的编号。 2)链表问题,最重要的搞懂核心思想,然后coding清楚,快慢指针要了解。 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

weixin_46838716的博客 661

判断是否有环以及求环的入口节点。

通过快慢指针来判断是否有环。慢指针为slow,快指针为fast。slow每次走一步,fast每次走两步,都从首节点开始。

m0_63852255的博客 1542

判断单链表是否有环 并找出第一个相交的节点

http://blog.youkuaiyun.com/hackbuteer1/article/details/7583102 2、给出一个单向链表的头指针pHead,判断链表中是否有环。 示意图如下: 链表中有环,其实也就是自相交。我们用两个指针pslow和pfast从头开始遍历链表,pslow每次前进一个节点,pfast每次前进两个结点,若存在环,则pslow和pfast肯定会在环中相遇,若不存在

miao6664659的专栏 2433

LLC同步整流实战:从驱动时序到调试仿真,效率提升与避坑指南

同步整流技术是提升开关电源效率的关键手段,尤其在LLC谐振变换器中,通过低导通电阻MOSFET替代二极管可显著降低副边整流损耗。然而,驱动时序、电流过零检测及轻载模式切换是工程实践中的核心难点。从Vds检测原理到死区调节,再到仿真与实测验证,工程师需掌握完整的调试方法论。该技术广泛应用于通信电源、服务器电源及车载DC/DC,合理设计LLC同步整流方案能实现满载效率提升约1.8个百分点,同时优化热分布。本文以600W半桥LLC样机为线索,深入分析工作模态、驱动芯片选型、波形判断与仿真模型搭建,为电源设计提供可

weixin_29165465的博客 291

SCL3400硬件避坑指南:引脚兼容性测试+模式切换异常处理

本文针对村田SCL3400双轴倾角计在实际硬件设计中的常见问题,提供了详细的避坑指南。重点解析了从SCL3300迁移时的引脚兼容性真相,包括SPI时序、电源去耦等关键差异,并深入探讨了模式切换中超量程错误的复现原因与软件容错方案。同时,指导了如何根据应用场景配置低通滤波器,并给出了无自动唤醒功能下的可靠电源与长线SPI通信管理策略。

weixin_29190573的博客 291

链表是否有环,求交点

链表是否有环 private static class ListNode { private int val; private ListNode next; public ListNode() { } public ListNode(int val) { this.val = val; ...

cccfire的博客 287

一文读懂:CAN总线Bus-Off的触发条件与自动恢复机制

本文详细解析CAN总线Bus-Off状态的触发条件与自动恢复机制。根据ISO 11898-1标准,当发送错误计数器(TEC)超过255时节点进入Bus-Off状态,并通过检测128次总线空闲条件实现自动恢复。文章结合实战案例,探讨硬件故障、软件配置及电磁干扰等常见触发场景,并提供快慢恢复策略与调试方法,帮助工程师快速定位并解决CAN网络故障。

rgv234567的博客 358

判断两个链表是否交叉,并求出交叉点

<br />在前面一篇文章中讲了如何判断一个链表中有环,如果有环的话,又如何判断出环出现在哪里<br />http://blog.youkuaiyun.com/xie376450483/archive/2010/08/19/5825261.aspx<br /> <br />今天要讲的和那篇类似,就是给定两个链表,如何来判断这两个链表相交了<br />首先应该分两种情况考虑,第一:这两个链表本身都没有环。  第二:这两个链表本身都有环<br /> <br />首先讲都没有环的情况,如下图<br /><br />方法很多,

Seanyxie Blog 9332

Labview执行adbshell操作

一、目录 1、实现思路 2、adbshell工具配置 3、Labview执行命令窗口 1、实现思路 使用Labview的优点: 1、可以配合电源系统或者调用其他接口工具实现更高程度的自动化测试; 2、直接执行Linux相关命令,编写相关执行顺序或者逻辑更简易; --------可以用adbpush命令将.sh的脚本文件推入控制器内部执行; 3、Ubuntu系统比较大,如果只是日常执行脚本测试还是比较占用磁盘空间; 2、adbshell工具配置 1)下载adbshell工具; adbshell工具下载链

zataji的博客 2052

15.1-缓存调试解析

摘要:DSU-120提供L3缓存和监听过滤器(SF)RAM的调试功能,通过CLUSTERCDBG寄存器控制访问。该功能需在集群ON电源模式下使用,且需确保单核访问。寄存器位字段根据读写操作不同,可配置WAY、RAM类型等参数。数据读取分为监听过滤器RAM、标签RAM、数据RAM及MTE标签四种类型,各有特定的位字段解释。配置参数包括切片ID宽度、标签索引宽度等,随缓存大小变化。

baron-周贺贺-代码改变世界ctw 110

两链表求公共节点

引言 其实这道题目早在剑指Offer上就已经出现过,参见以前的这篇文章,但后来July前辈也有一片文章讲过类似问题,对比之下,之前的解法还不够全面,没有考虑到所有情况,这篇文章把这道题目作一个梳理。 题目总结起来是这样: 输入两个链表,判断它们是否有公共节点,返回bool。 引申:找出它们的第一个公共节点的指针,如果没有公共节点则返回NULL。 链表的定义如下: struct...

weixin_30446197的博客 372

从 SAP Gateway 旧 add-ons 卸载到 SAP S/4HANA 转换的清理路线

摘要: SAP Gateway系统的维护难点往往源于历史遗留组件的堆积,而非OData服务本身的复杂性。早期系统为支持多种服务类型而安装的各类add-ons(如IW_SCS、IW_CNT、GW_CORE等),随着系统升级和团队更替逐渐成为技术负债。自SAP NetWeaver 7.40起,核心功能已整合至SAP_GWFND组件,使架构显著简化。在向S/4HANA迁移时,需重点清理已废弃的add-ons(如IW_SCS、IW_GIL等),但必须谨慎验证其关联服务是否仍被调用。组件清理需结合系统日志和调用链分析

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 423

如何判断两个链表是否相交?如果相交求交点

问题描述:一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。(注意两个单链表相交不会出现X型交叉——单链表,每个节点只有一个指针域)。第一种情况:两个链表均不含有环解题思路:1、直接法:采用暴力的方法,遍历两个链表,判断第一个链表的每个结点是否在第二个链表中,时间复杂度为O(len1*len2),耗时很大;顺序查询到第一个在第二个链表种的节点即是两个链表的交点。2、先遍历第一个链表...

Gandoph的博客 1万+

华为防火墙——本地Portal认证

配置IP地址、路由、Nat策略使得内网主机可以访问公网服务器对网段不进行认证,对网段进行portal认证。

m0_49864110的博客 3258

实战篇| app爬虫不用真机

之前写过一篇基于真机app爬虫《App爬虫实战篇-以华为真机手机爬取集换社的app为例》,如果大家有用真机爬虫的经历,会深刻认识到真的不方便,一是自己的手机,经常会被电话、微信等打断,二是闲置手机,面对小批量数据还能勉强,大批量爬虫,会导致成本指数级上升,并且控制起来相对麻烦。以下就是常见的模拟器。emulator -avd my_avd -no-snapshot-save # 启动时不保存 snapshot。emulator -avd my_avd -wipe-data # 清除数据(恢复到出厂)

youbingchen的博客 596

有环单链表,求环长、链长;求两链表的交点

正是一个关于单链表的经典例题。即,给定一个有环的单链表,求环长、链长等。或者,给定一个单链表,判断是否有环? 可以遍历这个链表,将每一个节点存入一个有顺序的集合,同时判断当前节点是否在这个集合中出现,从而判断该链表是否有环以及求环长与链长。当时空间复杂度与时间复杂度都过大了。 另一个经典方法就是快慢指针,即两个指针同时从链表头开始走,快指针一次走2步,慢指针一次走1步。于是 假设这个有环链表的j...

背对星星和月亮 860

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

判断单链表是否有环,如果有找出环的入口位置=>求两个相交链表的交点

http://beyrens.blog.163.com/blog/static/9589445220081013332452/ 首先如何判断一个链表是否有环: 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如

gukesdo的专栏 4515

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

判断两个链表是否相交并找出交点

问题描述: 一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。 思路: 1、碰到这个问题,第一印象是采用hash来判断,将两个链表的节点进行hash,然后判断出节点,这种想法当然是可以的。 2、当然采用暴力的方法也是可以的,遍历两个链表,在遍历的过程中进行比较,看节点是否相同。 3、第三种思路是比较奇特的,在编程之美上看到的。先遍历第一个链表到他的尾部,然后将尾部的

疯狂算法~ 3万+

判断两个链表是否相交并找出交点,判断一个链表是否有环

链表的分类 链表主要分为三类: 单向链表只能从表头到表尾的顺序,每个节点中保存了指向下一个节点的指针; 双向链表则可以反向遍历,因为节点中既保存了向后节点的指针,又保存了向前节点的指针。 循环链表指的是在单向链表和双向链表的基础上,将两种链表的最后一个结点指向第一个结点从而实现循环。 判断两个链表是否相交并找出交点 问题描述: 一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点。 解...

qichangjian的博客 1879

判断两个链表是否相交,若相交,求交点。

首先我们来看一下单链表: 第一种情况:两个链表均不带环 判断两个不带环的链表是否相交,如果两个链表相交的话可如下图所示: 判断是否相交:由上图可知,如果两个不带环链表相交的话这两个不带坏链表的尾节点地址一定相同,所以我们只要各自遍历两个链表,判断其尾节点地址是否相同,如果相同则相交,否则不相交。 typedef struct SListNode { DataType data...

ty6693的博客 472

【链表】如何判断两个单向链表是否有相交,并找出交点

判断两个链表是否相交:(假设两个链表都没有环) 1、判断第一个链表的每个节点是否在第二个链表中 2、把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交 3、先遍历第一个链表,记住最后一个节点,再遍历第二个链表,得到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交 如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针) 一种O(n)的办法就是(用两个指...

永生只是一场幻梦 3186

给定两个单链表,判断是否有交点,如果有则返回第一个交点

算法:得到两条链的长度m和n,再定义两个指针p1和p2,分别指向两条链的开头,如果m>n,则让p1先走m-n步,如果n>m,则让p2先走n-m步,然后两个指针再一起走,相遇的第一个点就是第一个交点,若不相遇则没有交点。(两个链表都无环) (相交的特征:只要两条链表相交,则从第一个交点开始后面的节点都相交) 注:还要就链表是否有环的情况进行分类讨论。 (1)如果一个有环一个无环则肯定不相交 (2)都有环但是两个链表不相交 (3)都有环且相交 有环情况...

m0_47560114的博客 457

判断两个可能有环的链表是否有交点

判断两个可能有环的链表是否有交点两个单链表相交的一系列问题首先需要判断单链表是否有环hashSet(很简单,不多说,空间复杂度O(n))快慢指针接下来就需要解决有无交点的问题:两个无环链表是否有交点:两个有环链表是否有交点(***三种拓扑结构***)完整代码(java) 最近准备面试的时候碰到的一道题,记录一下…… 【问题】:单链表可能有环, 也可能无环。 给定两个 单链表的头节点 head1和head2, 这两个链表可能相交, 也可能 不相交。 请实现一个函数, 如果两个链表相交, 请返回相交的 第一个节

weixin_43578004的博客 617

单链表有环求长度及相交问题

单链表的节点只有一个指针指向下一个节点,两个单链表相交的话就会导致两个单链表的尾节点是相同的,所以只需要比较尾节点是否相同就可以知道两个单链表是否相交。但是,这样是否就完全没有问题了呢?

notishell的专栏 993
上一篇: 求两条链表有无交点和第一个交点
下一篇: 重载自增运算符(前置自增++p和后置自增p++)
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值