]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)
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;}
求交点:对于环内相交,环上所有的点相同,无交点;环外相交,就相当于不考虑带环的情况,参看上述方法
]数据结构:单链表之判断两个链表是否相交及求交点(带环、不带环)相关推荐
- poj 1039 Pipe (判断 直线和 线段 是否相交 并 求交点)
http://poj.org/problem?id=1039 题意:已知电缆是由一段段直的管道连接而成的,并知道这些管道的位置,问一束光从最左边射进来,你可以调节光入射的位置和角度,问最远能射到多远. ...
- c++如何判断两个字符串是否相同?_链表 | 如何判断两个单链表(无环)是否交叉...
如何判断两个单链表(无环)是否交叉 单链表相交指的是两个链表存在完全重合的部分,如下图所示 在上图中,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点. 分析 Hash法 ...
- 如何判断链表有环、如何判断两个链表相交
如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现"环",就像题图这样.如何用程序判断出这个链表是有环链表? 不允许修改链表结构. 时间复杂度O(n),空间复杂度O(1) ...
- 如何判断两个链表是否相交并求出相交点
排除链表存在环的情况 此情况的意思就是普通的单链表是否相交问题. 相交是什么意思?注意不是单纯的节点的数值域相等,相交的意思是两个链表的部门节点的是同一个,就是这些节点为这两个链表共有. 链表的定义参 ...
- 编程之美:编程判断两个链表是否相交
1.问题描述 给出两个单向链表的头指针,比如h1.h2,判断两个链表是否相交.编程之美为了简化问题,假设两个链表均不带环. 如下图: 2.分析与解法 解法一:直观法,先判断第一个链表的每个节点是否在第 ...
- 3.6 判断两个链表是否相交
判断两个链表是否相交,若相交则求其交点(指第一个相交的点). 思路1,利用计数法: 遍历链表1,将其节点的内存地址存入map或者hashmap内.然后遍历链表2,并查询map或者hashmap,判断链 ...
- 判断两个链表是否相交
方法:获得两个链表的长度,获得长度的差值len,然后首先遍历较长的链表len次,然后再同时遍历两个链表,如果有相同部分,两个链表就相交,如果没有,则不相交,即没有公共部分. 代码: #include ...
- 判断两条链表是否交叉,若有交叉,返回交叉节点的指针。
上周面试挂了,反思原因,莫非是因为一道算法题没做好吗?这题目是"判断两条链表是否交叉,若有交叉,返回交叉节点的指针." 为了防止反复在同一个阴沟里翻船,决定把最优解写出来. #in ...
- C++判断两个链表是否相交算法
1.判断一个链表是否相交,若相交,求交点(假设链表带环) 2.具体思路如下图所示 既然已经分析清楚,那么代码就很好实现了. Node* IsHaveCrossNode(Node* head1,Node ...
最新文章
- (0081)iOS开发之无限后台定位并上传数据到服务器
- 海南橡胶机器人成本_完成专利授权20余件!海南橡胶中橡科技搭建高标准研发平台...
- java中对象的序列化和反序列化
- 安全编程: 防止缓冲区溢出
- Android数据库存放的具体位置
- Wampserver的安装与配置笔记
- python判别性别的代码_python如何实现性别识别 python实现性别识别代码示例
- lvm(逻辑卷--可扩展存储设备)
- 电脑开机进不了桌面拒绝访问怎么办
- c++ STL之queue
- [数据结构]树状数组详解
- vue基础(三)——vue实例化对象
- QGraphicsItem的使用
- Win11包含APPX驱动重装及备份教
- 【毕业设计】基于卷积神经网络的植物花卉识别系统
- 广工Anyview数据结构2021-C语言版--第一章
- 李炎恢bootstrap做轮播器的方法与思路
- 深入理解Java虚拟机 第2版 周志明著(三)
- 模块电路选型(7)----人机交互模块
- 人工智能之无人驾驶技术到底是怎么回事