`
yangyou230
  • 浏览: 1647851 次
文章分类
社区版块
存档分类

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

 
阅读更多

比较好的方法有两个:

一、将其中一个链表首尾相连,检测另外一个链表是否存在环,如果存在,则两个链表相交,而检测出来的依赖环入口即为相交的第一个点。

二、如果两个链表相交,那个两个链表从相交点到链表结束都是相同的节点,我们可以先遍历一个链表,直到尾部,再遍历另外一个链表,如果也可以走到同样的结尾点,则两个链表相交。这时我们记下两个链表length,再遍历一次,长链表节点先出发前进(lengthMax-lengthMin)步,之后两个链表同时前进,每次一步,相遇的第一点即为两个链表相交的第一个点。

引申问题:如何判断一个链表是环形链表

设置两个指针p1,p2。每次循环p1向前走一步,p2向前走两步。直到p2碰到NULL指针或者两个指针相等结束循环。如果两个指针相等则说明存在环。时间复杂度为O(n)。


分享到:
评论

相关推荐

    算法大全-面试题-数据结构

    目录 1.单链表反转 2.找出单链表的倒数第4个元素 3.找出单链表的中间元素 4.删除无头单链表的一个节点 ...10.两个单链表相交,计算相交点 11.用链表模拟大整数加法运算 12.单链表排序 13.删除单链表中重复的元素

    算法大全-面试题-链表-栈-二叉树-数据结构.docx

    算法大全-面试题-链表-栈-二叉树-数据结构.docx 一、单链表 目录 1.单链表反转 2.... 3....两个单链表相交,计算相交点 11.用链表模拟大整数加法运算 12.单链表排序 13.删除单链表中重复的元素

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

    判断两个有环链表是否相交,相交则返回第一个相交节点,否则返回null 在考虑此问题时,根据前面几篇文章的解法,我们已经得到了各自链表的入环节点,分别为loop1和loop2 思路 以下是问题三的具体解决过程: 如果loop...

    判断链表是否相交的几种算法1

    可以看到如果把h1链表的尾节点的next指针指向h2链表的第一个节点,那么可以看到如果h1和h2相交,则h2变成了一个循环单链表,因此只需判断h2是否为循环链表

    这是Kotlin语言版本的 Android 客户端本地化算法展示 Java 语言编写的面试算法_kotlin_代码_下载

    两个单链表相交的问题 将单链表的每K个节点之间逆序 二叉树问题 用二叉、先序和序顺序法 打印二叉树的存在节点 二叉树的序列化和反序列化 示例算法 冒泡示例 选择示例 插件示例 计数示例 快速示例 并举示例 堆示例...

    5_作业1

    8. 找出链表的倒数第四个节点9. 找出链表的中间节点10. 判断单链表是否有环11. 判断两个链表是否相交, 如果相交, 计算交点12. 删除单链表中重复的元

    错的人迟早会走散,而对的人迟早会相逢~leetcode链表160. 相交链表

    编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference...

    leetcode160相交链表,三种方法。python 代码+思路

    编写一个程序,找到两个单链表相交的起始节点。 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值...

    [第一次实验]链表1

    1. 求两个带头节点的单链表相交的第一个节点通过如下函数实现:思路:如果两个尾结点是一样的,说明它们用重合;否则两个链表没有公共的结点。先分别遍历两个链表得到它

    实现关于链表的各种操作及排序

    这个头文件实现了链表有关的基本操作,包括:发现链表是否有环、求环入口及环长度、求两个链表是否相交、反转链表、还有各种排序操作,基于链表的插入排序,冒泡排序、选择排序、合并排序、快速排序

    leetcode中国-LeetCode:力扣解决方案

    打印两个单链表的相交的问题,注意还要考虑有环没有。 如何找到入环的节点? 当快慢指针相遇时,把快指针指向头节点,快指针和慢指针都逐步更改,再次相遇的结点就是入环结点,可以数学证明 两个无环,一个有环一个...

    leetcode中国-Programing-practice-of-summer-vacation-in-2020:2020年暑假编程实践

    leetcode中国 2020年暑期编程练习 编程练习的题目 0、查漏补缺,将C语言基础语法必须全部学会...计算两个圆的公切线 求矩形的并的面积 求多边形面积 求多边形重心 求凸包 STL:了解STL,学习vector和list用法,请参考下

    数据结构:八大数据结构分析.pdf

    线性表(linear list)是数据结构的⼀种,线性表就是数据排列成⼀条先⼀样的结 构,每个线性表上的数据最多只有前和后两个⽅向。⼀个线性表是n个具有相同特性的数据元素的有限序列。 特点: 1. 集合中必存在唯⼀的⼀...

    C/C++:二叉排序树.rar(含完整注释)

    所以子树的左右两棵子树也要相交换,依此类推。最后输出所得到的二叉树的中序遍历序列。 例如,经过上述操作后,(1)中所得的二叉排序树变为如下形式。 输出该二叉树的中序序列,结果为:70 60 55 53 45 40 37 24 ...

    leetcode分发糖果-ForDaFactory:使用C++的个人leetcode解决方案

    21-合并两个有序链表:merge-two-sorted-lists 83-删除排序链表中的重复元素:remove-duplicates-from-sorted-list 92-反转链表II:reverse-linked-listt-ii 141-环形链表:linked-list-cycle 142-环形链表:linked-list-...

    第五章 树与二叉树

    又称二链表表示法,其方法是链表中每个结点除数据域外,还设置了两个指针分别指向该结点的第一个孩子和右兄弟链表的结构: Firstchild data rightsib 指针域,存储第一个孩子结点的存储地址 数据域,存储该结点...

Global site tag (gtag.js) - Google Analytics