转载自:http://blog.csdn.net/seanyxie/article/details/6247071

在前面一篇文章中讲了如何判断一个链表中有环,如果有环的话,又如何判断出环出现在哪里

http://blog.csdn.net/xie376450483/archive/2010/08/19/5825261.aspx

今天要讲的和那篇类似,就是给定两个链表,如何来判断这两个链表相交了

首先应该分两种情况考虑,第一:这两个链表本身都没有环。  第二:这两个链表本身都有环

首先讲都没有环的情况,如下图

方法很多,不过我想最简单的方法是遍历第一个链表,然后遍历到最后一个节点时候,用一个指针把节点地址记录下来

然后再来遍历第二个链表,同样记录下最后一个链表的地址,如果两个指针的指向一样,那么就可以判断出两个链表相交了

然后再来判断他们的交点

把第一个链表的尾节点指向第二个链表的头结点,这样就形成了一个6字型的环链表,利用我们前面那篇文章讲的方法就可以求出相交节点

然后说第二种情况

两个链表本身都有环,首先我们应该知道如果一个链表有环,一个链表没有环,那么他们肯定不想交,自己画画图就明白了,不多说

现在判断出两个链表都有环,那么怎么来判断相交了呢?

方法是遍历利用前面的方法找到第一个链表的环点,然后将环断开(当然不要忘记了保存它的下一个节点),然后再来遍历第二个链表,如果发现第二个链表从有环变成了无环,那么他们就是相交的嘛,否则就是不相交的了。

在判断出来两个有环的链表有交点后,然后来找出相交的节点,这时候又分了两种情况,相交点在环之前还是相交点在环之后,这样讲不严谨,应该是对一个链表来讲相交点是在另一个链表的环之前还是之后。

方法如下

首先找到两个链表的环点,利用前面那篇文章的方法,假设两个链表的环点分别是p1,p2 加入p1==p2 说明相交点是在环点之前,

如下图:

这时候我们可以从环点断开,同样记得保存下一个节点,然后把环点指向其中一个链表的表头,这样就把问题转换成前面6字形环形链表的相交节点问题

如果两个链表的相交情况如下图呢?

那这样就很那说哪个是交点了,因为有两个交点,其实不叫两个交点,是相对于l1来讲交点是l2的环点,相对于l2来讲交点是l1的环点

而环点同样是前面的方法得到的。

判断两个链表是否交叉,并求出交叉点相关推荐

  1. 如何判断两个链表是否相交并求出相交点

    排除链表存在环的情况 此情况的意思就是普通的单链表是否相交问题. 相交是什么意思?注意不是单纯的节点的数值域相等,相交的意思是两个链表的部门节点的是同一个,就是这些节点为这两个链表共有. 链表的定义参 ...

  2. 判断两条链表是否交叉,若有交叉,返回交叉节点的指针。

    上周面试挂了,反思原因,莫非是因为一道算法题没做好吗?这题目是"判断两条链表是否交叉,若有交叉,返回交叉节点的指针." 为了防止反复在同一个阴沟里翻船,决定把最优解写出来. #in ...

  3. ]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)

    1.判断两个链表是否相交,若相交,求交点.(假设链表不带环) 两个指针同时指向两个链表,分别依次往后遍历链表到最后一个节点,如指针的值相同(即节点地址相同),反之没有交点. int IsCross(N ...

  4. 3.6 判断两个链表是否相交

    判断两个链表是否相交,若相交则求其交点(指第一个相交的点). 思路1,利用计数法: 遍历链表1,将其节点的内存地址存入map或者hashmap内.然后遍历链表2,并查询map或者hashmap,判断链 ...

  5. 如何判断链表有环、如何判断两个链表相交

    如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现"环",就像题图这样.如何用程序判断出这个链表是有环链表? 不允许修改链表结构. 时间复杂度O(n),空间复杂度O(1) ...

  6. 编程之美:编程判断两个链表是否相交

    1.问题描述 给出两个单向链表的头指针,比如h1.h2,判断两个链表是否相交.编程之美为了简化问题,假设两个链表均不带环. 如下图: 2.分析与解法 解法一:直观法,先判断第一个链表的每个节点是否在第 ...

  7. 判断两个链表是否相交

    方法:获得两个链表的长度,获得长度的差值len,然后首先遍历较长的链表len次,然后再同时遍历两个链表,如果有相同部分,两个链表就相交,如果没有,则不相交,即没有公共部分. 代码: #include ...

  8. 判断连个单链表是否交叉,并找到交叉点

    链表如果相交则两个链表的形态应该是Y或者是V型,所以判断两个链表是否相交有两种方式: 一.比较两个链表的尾部是否相同,如果相同则两个链表相交,交叉点可以通过两个链表的长度差进行计算,因为交点后面的长度 ...

  9. 求两门成绩平均c语言,数据结构课的作业 要求用链表实现学生的学号 姓名 两门课的成绩 同时求出课程的平均成绩...

    数据结构课的作业 要求用链表实现学生的学号 姓名 两门课的成绩 同时求出课程的平均成绩 关注:69  答案:2  mip版 解决时间 2021-02-04 09:43 提问者孤城古巷 2021-02- ...

最新文章

  1. OSChina 周四乱弹 —— 春天在哪里,春天在哪里?
  2. putchar(c1)在C语言中表示,C语言中的getchar和putchar详解
  3. pytorch scatter_函数学习笔记
  4. c# 如何设置透明画刷
  5. NYOJ 460 项链
  6. 13-19 Python Number、Python字符串、Python列表(List)、集合的基本操作、元组、字典Dicttionnary、日期和时间
  7. linux 系统arp检测工具,基于LinuxARP检测与防御系统.doc
  8. 如何在不到1ms的延迟内完成100K TPS
  9. Win11体验——该来的来了,该走的没走,不该走的走了
  10. 关于Android(Java)创建匿名线程
  11. NetBeans 6.9 正式版发布!
  12. graphx 基础算法
  13. 使用原配的SSD安装和引导DSM5.2 5644 基于zmouse和Formater教程
  14. 想自学一下程序员,该学些什么?
  15. mezzanine用户扩展/PUBLIC USER ACCOUNTS(一)
  16. 【Lua从青铜到王者基础篇】第十二篇:Lua错误处理
  17. 计算机win10无法正常登录系统,win10系统无法使用微软账户登录系统的解决方法...
  18. 【阿朱洞察】中国云计算市场未来3年展望
  19. system/bt目录内容解析
  20. 【51单片机】HX711智能电子秤语音播报蓝牙传输设计

热门文章

  1. 一个正经的前端学习 开源 仓库(阶段十七-440)
  2. 交易接口 TradeX-M.lic
  3. 长痘的原因及治疗方法
  4. 永磁同步电机(PMSM)参数辨识(一)
  5. html5诅咒学园通关,NO.5 诅咒发作
  6. 5线DBCD股票趋势
  7. windows sql server 如何卸载干净?
  8. 【机器学习的Tricks】随机权值平均优化器swa
  9. 报:类com.qin.servlet.HelloServlet不是Servlet
  10. 【TensorFlow】使用AlexNet网络对图片进行识别分类