如何判断两个有环链表是否相交

左神算法:两个单链表相交的一系列问题(链表是否有环 / 两无环链表是否相交 / 两有环链表是否相交) 本题来自左神《程序员代码面试指南》“两个单链表相交的一系列问题”题目。 题目 在本题中,单链表可能有环,也可能无环。给定两个单链表的头节点 head1 和 head2,这两个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回 null 即可。 要求:如果链表 1 的长度为 N,链表 2 的长度为 M,时间复杂度请达到 O(N+M),额外空间复杂度请达到 O(1)。 题解 本题可以拆分成 三个子问题,每个问题都可以作为一道独立的算法题,具体如下。 问题. 阅读详情

如何判断两个有环链表是否相交

问题

​ 如何判断两个有环链表是否相交,相交则返回第一个相交节点,不相交则返回null。

思路

​ 我们已经得到了两个链表各自的第一个入环节点,假设链表1的第一个入环节点为loop1,链表2的第一个入环节点为loop2。具体如下:

​ 1.如果loop1 == loop2,拓扑结构如图:

在这里插入图片描述

​ 该情况下,考虑链表1从头开始到loop1这一段与链表2从头开始到loop2这一段,在哪里第一次相交即可。这与判断两个无环链表是否相交类似,只是这里把loop1(loop2)作为判断终止条件。

​ 2.如果loop1 != loop2,两个链表不相交的拓扑结构如图:

case1case2
在这里插入图片描述在这里插入图片描述

​ 需要分辨是哪种情况,进入步骤3。

​ 3.让链表1从loop1出发,因为loop1和之后节点都在环上,所以将来一定能回到loop1。如果回到loop1之前并没有遇到loop2,那么将是case1,也就是不相交,返回null。否则是case2,也就是相交。因为loop1和loop2都在两条链表上,此时返回loop1或loop2都可以。

代码

public Node bothLoop(Node head1, Node loop1, Node head2, Node loop2){
    Node cur1 = null;
    Node cur2 = null;
    if (loop1 == loop2){
        cur1 = head1;
        cur2 = head2;
        int n = 0;
        while (cur1 != loop1){
            n++;
            cur1 = cur1.next;
        }
        while (cur2 != loop2){
            n--;
            cur2 = cur2.next;
        }
        cur1 = n > 0?head1:head2;
        cur2 = cur1 == head1?head2:head1;
        n = Math.abs(n);
        while (n != 0){
            n--;
            cur1 = cur1.next;
        }
        while (cur1 != cur2){
            cur1 = cur1.next;
            cur2 = cur2.next;
        }
        return cur1;
    } else {
      cur1 = loop1.next;
        while (cur1 != loop1){
            if (cur1 == loop2){
                return loop1;
            }
            cur1 = cur1.next;
        }
        return null;
    }
}
判断两个链表是否相交并找出第一个相交节点 如何判断两个链表是否相交并找出第一个相交节点? ①相交的两个单链表要么均有环,要么都没有环 ②一个有环的单链表和一个无环的单链表不可能相交 一、什么是链表相交? 二、怎么判断两个链表是否相交? 三、怎么找到两个链表的第一个相交节点? 阅读详情

相关推荐

ROS2进程内通信:零拷贝Intra-Process原理与实战

Intra-Process通信是ROS2实现低延迟节点间数据交换的核心机制,其本质是通过C++17智能指针与零拷贝共享内存,在同一进程内绕过序列化、系统调用和上下文切换。相比传统DDS跨进程通信,它将`geometry_msgs::Twist`类消息延迟从42μs降至0.8μs,显著提升机器人实时控制性能。该技术并非自动启用,需满足同执行器、QoS严格匹配、内存所有权明确三大约束,适用于机械臂控制、视觉SLAM、图像处理流水线等对端到端延迟敏感的场景。本文聚焦ROS2原生Intra-Process通讯的原理

weixin_30619101的博客 362

三子棋游戏问题

//tic-tac-toe 游戏 #include <stdio.h> int main() { const int size = 3; int board[size][size]; int i, j; int numOfX1; int numOfO1; // 添加两个变量,判断行列的时候,标记列中X和O的个数;判断对角线的时候,标记另一条对角线的X和O的而数量;以便减少循环次数。 int numOfX2; int numOfO

zxc0074869的博客 1922

随机化策略——随机变量rand、约束constraint、权重dist、随机数产生示例

文章目录一、随机变量类型1.1.rand随机变量1.2.randc随机变量二、随机化约束2.1.constraint指定约束范围2.1.1.关系操作符约束(>、<、=、>=、<=)2.1.2.范围操作符约束(inside)2.1.3.权重分布约束(dist)2.1.4.条件约束(if-else; ->)三、启动随机化——randomize( )函数四、关闭或打开随机变...

Mr.翟的博客 2万+

如果链表可能有环,判断两个链表是否相交?

题目来源:编程之美 《3.6 编程判断两个链表是否相交?》的扩展问题。 上网查找了写资料现做个总结。 可以分两步:(1)判断两个链表是否有环?若有环,入口点是什么? (2)判断是否相交? 第一个问题的典型解法为设置两个指针p1和p2,p1每次走一步,p2每次走两步,若有环,则p1和p2一定会相遇,否则没有环。当p1和p2相遇时,另p2回到链表起始处,每次走一步和p1同时移动

andahuzhuang的博客 500

【保姆级教程/代码】使用PRIDE PPP-AR软件解算ZTD、反演GNSS PWV,并评估精度

在本算例中,我下载了BJFS站2024年的IGS ZTD产品,用于评估PRIDE PPP-AR软件解算出ZTD结果的精度。

weixin_43910227的博客 2369

Qt中多线程的使用(一)

我们要实现的是读取大文件qtgui.index的内容加入文本框中。 很容易想到的方法: QFile* file = new QFile("E:\qtgui.index"); file-&gt;open(QIODevice::ReadOnly); QTextStream *stream = new QTextStream(file); while(!st...

yao5hed的专栏 1万+

链表有环和相交问题

问题1:https://leetcode.com/problems/linked-list-cycle/ 这是一道算法题,判断一个链表是否有环,相应输出true或者false。那怎么考虑这个问题呢?       首先想到的是遍历链表,有环与无环的区别在于,无环时遍历会最终停止,而有环则会进入死循环,重复遍历环内节点。因此可以借助于判断节点是否第二次访问来判断有无环。具体做法有以下几种: 1、

jxwhome的专栏 799

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 285

判断有环链表是否相交

有环链表相交,首先两链表都要有环,一个有环一个无环不可能相交。有环链表相交有三种情况 则只需要判断是否共有一个环就行。 思路:分别取两链表上两个环内结点node1和node2,然后让node1遍历,如果与node2相遇,则代表位于一个环,反之,则不想交。 //求环中相遇结点 public Node cycleNode(Node head){ //链表为空则返回null

inspiredbh的博客 529

Vue2 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue2,nuxt2,海康威视,海康监控,摄像头监控,vue对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue,海康,vue海康视频监控,海康开放平台,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue2对接海康监控设备,无法连

🏆 前端领域优质创作者 8245

(五)深入理解Bluez协议栈之“GATT Server Profile”

上一篇介绍Bluez协议栈的了GAP Profile的实现,本章节我们继续介绍GATT Profile的实现,参考的程序是Peripheral。通过阅读它的实现代码可以发现,它广播部分是通过mgmt来实现的,然后在初始化完成之后,创建了一个L2CAP类型的socket,来负责实现GATT Server的逻辑。

1142

loop转移指令

loop指令为循环指令,所有的循环指令都是短转移指令 所有条件转移指令都是短转移指令,对于的机器码中包含了位移的范围(-128~127) 这个位移范围是编译器在编译的时候计算出来的 指令格式:loop 标号(cx=cx-1,如果cx≠0,转移到标号处执行) 操作: (1)cx=cx-1 (2)如果cx≠0,IP=IP+八位位移 (不低于0则进行跳转,等于零则继续运行下面的程序) 八位位移=标号处的地址-loop指令后第一个字节的地址 问题:补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0

_Co1a 1264

[PCIe5.0] 2.2.7.1 TPH Rules

TPH 机制通过硬件提示优化数据流,适用于高性能计算和存储场景。

系统固件工程师 349

C语言强化(七)链表相交问题_4 判断两个有环链表是否相交

上一节结束后,我们已经可以判断链表是否有环了,如果无环,那么按照前两节所讲的方法去判断链表是否相交以及获取相交结点,如果有环呢?怎么判断是否相交?

SexyCode 1549

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【相当困难】两个单链表相交的一系列问题之问题三:如何判断两个有环链表是否相交-Java

package live.every.day.ProgrammingDesign.CodingInterviewGuide.List; /** * 两个单链表相交的一系列问题 * * 【题目】 * 在本题中,单链表可能有环,也可能无环。给定两个单链表的头节点head1和head2,这两个链表可能相交,也可能不相交。请实现一 * 个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null即可。 * 要求:如果链表1的长度为N,链表2的长度为M,时间复杂度请达到O(N+M),额外空

了解➔熟悉➔掌握➔精通 643

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

链表问题11——两个单链表相交的系列问题(三):判断两个有环链表是否相交

题目 判断两个有环链表是否相交,相交则返回第一个相交节点,否则返回null 在考虑此问题时,根据前面几篇文章的解法,我们已经得到了各自链表的入环节点,分别为loop1和loop2 思路 以下是问题三的具体解决过程: 如果loop1==loop2,我们只需要考虑从链表1的头节点head1到loop1这一段与从链表2的头节点head2到loop2这一段中,在哪里第一次相交,这与问题二,前面一...

flying_1314的博客 418

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

判断两个链表是否相交

JAVA堆和栈比较 两个链表,判断是否相交,找出相交的第一个点?     首先应该清楚两个单链表相交要么都是无环链表,要么都是有环链表,不存在一个有环链表和一个无环链表相交,因为两个链表一旦相交则后续的链表都应该是相同的 (1)将其中任意一个链表的环打破,即让尾结点指向null(记下保存原本应当指向的位置),然后判断第二个链表是否含有环,若第二个链表无环则相交,否则不相交 (2)利用判断单...

jing1008-wang的博客 1万+

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

转载自:http://blog.youkuaiyun.com/seanyxie/article/details/6247071 在前面一篇文章中讲了如何判断一个链表中有环,如果有环的话,又如何判断出环出现在哪里 http://blog.youkuaiyun.com/xie376450483/archive/2010/08/19/5825261.aspx   今天要讲的和那篇类似,就

hou_yaxin的博客 5154

C语言强化(七)链表相交问题_5 找到两个有环链表的相交结点

有环链表是否相交我们也可以判断了,剩下的就是获得有环链表相交结点 题目 给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交 解题步骤 判断两个【无环】链表是否相交找到两个【无环】链表的相交结点判断链表是否带环判断两个【有环】链表是否相交找到两个【有环】链表的相交结点 思路: 显然,...

daxyang2015的博客 350

两个链表相交的一系列问题【js实现】

题目: 在本题中,单链表可能有环也可能无环,给定两个单链表的头结点phead1 和phead2,这两个链表可能相交也可能不相交,请实现一个函数,如果两个链表相交,请返回相交的第一个节点,如果不相交,直接返回null 要求:如果链表1的长度为n,链表2的长度为m,时间复杂度请达到O(N + M),额外空间复杂度达到O(1) 这个问题可以拆分成三个子问题: 一:如何判断一个链表是否有环,如...

木木 693

两个单链表是否相交(考虑有环和无环)

步骤如下: (1)判断两个单链表中是否有环,如果

zhonghua18517的专栏 1010

编程之美:链表有环,如何判断相交

如果两个链表无换,判断是否相交很简单,判断两个环的最后一个节点指针是否相等即可。 题目描述:上面的问题都是针对链表无环的,那么如果现在,链表是有环的呢?上面的方法还同样有效么? 分析:如果有环且两个链表相交,则两个链表都有共同一个环,即环上的任意一个节点都存在于两个链表上。因此,就可以判断一链表上俩指针相遇的那个节点,在不在另一条链表上。 无环链表和有环链表是不可能相

知之可否 2651

JAVA两个单链表求交集_JAVA 判断两个单链表是否相交并求交点

在上一篇文档中,通过java实现了单链表反转的问题,之后发现一个更有意思的问题就是如何判断两个链表是否相交?如果相交,则需要得到交点。对于这个问题,需要分别考虑链表上是否存在环的情况。//链表节点public class DataNode {private int data;private DataNode next;public int getData() {return data;}publi...

weixin_35662019的博客 581

编程判断两个链表是否相交

《编程之美》3.6节:判断两个链表是否相交 问题:给出两个单项链表的头指针,判断这两个链表是否相交,假设都不带环。 解法:遍历第一个链表至尾节点,然后遍历第二个链表,如果尾节点和刚才相同,则说明相交,否则不想交。 代码: #include using namespace std; struct Node { Node *next; int data; Node(int d=0,No

u010585135的专栏 667

判断两个单链表是否相交

思路:一个链表可能有环也有可能没环,我们要首先判断是否有环。如果两个都没有环,则用无环链表的方式进行判断;如果一个有环,一个没环,则肯定不存在相交的问题;两个都有环的话,采用有环的方式就行判断。 无环的判断方式:先看一下两个链表的长度,然后让长链表先走n步,然后开始判断是否相等。 有环的判断方式:先看一下环的起点是否一样,如果一样,则转化为无环的判断方式;若不一样则遍历其中一个环,看看是否能够遇到...

qq_45481492的博客 260
上一篇: 如何判断两个无环链表是否相交
下一篇: 两个单链表相交的一系列问题
罗侯
博客等级 码龄10年 135粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值