1、判断两个链表是否相交,若相交,求交点。(假设链表不带环)

两个指针同时指向两个链表,分别依次往后遍历链表到最后一个节点,如指针的值相同(即节点地址相同),反之没有交点。

int IsCross(Node* pHead1, Node* pHead2)
{Node* Node1 = pHead1;Node* Node2 = pHead2;if((NULL == pHead1) || (NULL == pHead2)){return 0;}while(Node1->next){Node1 = Node1->next;}while(Node2->next){Node2 = Node2->next;}if(Node1 == Node2){return 1;}else{return 0;}
}

求交点:先对两个链表做对齐处理,然后同时遍历,看节点地址是否相同,遇到第一个相同的节点即交点

Node* GetCrossNode(Node* pHead1, Node* pHead2)
{Node* Node = pHead1;int steps = 0;int len1 = Size(pHead1);int len2 = Size(pHead2);int result = IsCross(pHead1, pHead2);if(result == 0 || (NULL == pHead1) || (NULL == pHead2) ){return NULL;}if(len1 > len2)steps = len1-len2;elsesteps = len2-len1;Node = ( len1 > len2 ? pHead1:pHead2 );while ( steps-- ) //对齐处理{Node = Node->next;}len1> len2 ?( pHead1 = Node) : (pHead2 = Node);while ( pHead1 != pHead2  ){pHead1 = pHead1->next, pHead2 = pHead2->next;}return pHead1;
}

2、 判断两个链表是否相交,若相交,求交点。(假设链表可能带环)
1)环外相交:

2)环内相交:

判断是否相交:

int IsCrossWithCircle(Node* pHead1, Node* pHead2)
{Node* fast = pHead1;Node* slow = pHead2;while( fast && slow && fast != slow ){slow = slow->next;if(fast->next){fast=fast->next->next;}else{fast = fast->next;}}if(fast && slow && fast == slow)return 1;elsereturn 0;}

求交点:对于环内相交,环上所有的点相同,无交点;环外相交,就相当于不考虑带环的情况,参看上述方法

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

  1. poj 1039 Pipe (判断 直线和 线段 是否相交 并 求交点)

    http://poj.org/problem?id=1039 题意:已知电缆是由一段段直的管道连接而成的,并知道这些管道的位置,问一束光从最左边射进来,你可以调节光入射的位置和角度,问最远能射到多远. ...

  2. c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...

    如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. C++判断两个链表是否相交算法

    1.判断一个链表是否相交,若相交,求交点(假设链表带环) 2.具体思路如下图所示 既然已经分析清楚,那么代码就很好实现了. Node* IsHaveCrossNode(Node* head1,Node ...

最新文章

  1. (0081)iOS开发之无限后台定位并上传数据到服务器
  2. 海南橡胶机器人成本_完成专利授权20余件!海南橡胶中橡科技搭建高标准研发平台...
  3. java中对象的序列化和反序列化
  4. 安全编程: 防止缓冲区溢出
  5. Android数据库存放的具体位置
  6. Wampserver的安装与配置笔记
  7. python判别性别的代码_python如何实现性别识别 python实现性别识别代码示例
  8. lvm(逻辑卷--可扩展存储设备)
  9. 电脑开机进不了桌面拒绝访问怎么办
  10. c++ STL之queue
  11. [数据结构]树状数组详解
  12. vue基础(三)——vue实例化对象
  13. QGraphicsItem的使用
  14. Win11包含APPX驱动重装及备份教
  15. 【毕业设计】基于卷积神经网络的植物花卉识别系统
  16. 广工Anyview数据结构2021-C语言版--第一章
  17. 李炎恢bootstrap做轮播器的方法与思路
  18. 深入理解Java虚拟机 第2版 周志明著(三)
  19. 模块电路选型(7)----人机交互模块
  20. 人工智能之无人驾驶技术到底是怎么回事

热门文章

  1. CSS基础学习 18.CSS多列
  2. 基于ASP.net耳机网店商城系统(前台页面+后台页面)
  3. [转]opencv学习资料
  4. Socket网络编程--简单Web服务器(6)
  5. 【案例】数据量猛增,BI分析效率太低怎么破?
  6. vue学习:7、路由跳转
  7. MyBatis的学习之路(二)
  8. IE、FF脚本兼容性问题
  9. JPA一对多循环引用的解决
  10. 【Pascal's Triangle II 】cpp