链表的相交以及链表的循环的判断以及查找
来源:互联网 发布:自己的社会网络 编辑:程序博客网 时间:2024/05/16 15:28
判断两个链表是否有交叉?
分为两种情况:
1)没有环(单链表)的交叉
2)(循环链表)有环的链表的交叉
1)单链表:
(1)两个单链表只能存在Y型交叉,不会存在X型交叉(?)公共一起的,以后的链表如果交叉了之后,不知道指向哪里因为有两条路可以走。
最简单的方式是直接遍历到两个链表的最后一个节点,判断它们是否相同。(消耗的时间较长)
(2)再进行求相交节点的。
把第一个链表的尾节点指向第二个链表的头结点,这样就形成了一个6字型的环链表,利用我们前面那篇文章讲的方法就可以求出相交节点
*************************************
一个链表是有环一个链表没有环的,是可能相交的,因为我们可以通过画图来理解(画图),因为链表循环都是在尾部折回来,没有中间进行分支的。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2)两个有环的链表的交叉
先对一个链表进行遍历,然后找出环点,将该链表的环在环点处断开(保持该环点),接着对第二个链表进行遍历,如果这个时候,第二个有环链表没有环了之后,那么久说明这两个有环链表是相交的,否则是不相交的。
不过我们可以看到有环的链表的交点是有两种情况的:
1)交在环点以及环点之前
2)交在环点之后的e
1)交在环点以及环点之前
假设两个链表的环点分别是p1,p2 加入p1==p2 说明相交点是在环点之前,
这时候我们可以从环点断开(这样就变成了单链表的相交的问题)如上面的讲解。
2)交在环点之后的
这样可以说明两个链表进入环的时候的点是不同的,
可以分别求出它们的环点。
前提知识点
参考链接:
判断链表是否为循环链表?以及如何查找出循环的链表的"环点"
http://www.cppblog.com/humanchao/archive/2008/04/17/47357.html
/*找出环的入口点:
当fast若与slow相遇时,slow肯定没有走遍历完链表,而fast已经在环内循环了n圈(1<=n)。假设slow走了s步,则fast走了2s步(fast步数还等于s 加上在环上多转的n圈),设环长为r,则:
2s = s + nr
s= nr
设整个链表长L,入口环与相遇点距离为x,起点到环入口点的距离为a。
a + x = nr
a + x = (n – 1)r +r = (n-1)r + L - a
a = (n-1)r + (L – a – x)
(L – a – x)为相遇点到环入口点的距离,由此可知,从链表头到环入口点等于(n-1)循环内环+相遇点到环入口点,于是我们从链表头、与相遇点分别设一个指针,每次各走一步,两个指针必定相遇,且相遇第一点为环入口点。
最为主要的就是设置的这两个指针为什么这样设置。这一点是很重要的。
*/
链表的相关的问题:很不错的关于链表的博客
http://wuchong.me/blog/2014/03/25/interview-link-questions/
- 链表的相交以及链表的循环的判断以及查找
- 编程之美-编程判断两个链表(可能含环)是否相交以及相交的第一个结点
- 链表相交以及链表含环的相关问题
- 判断矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 判断两个矩形相交以及求出相交的区域
- 单向链表相交的第一个公共结点, 判断链表是否有环以及环的入口节点
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- 链表的增删、查找以及逆序
- 判断两个矩形相交以及求出相交的区域(生成的相交矩形)
- 判断带环链表相交的点
- 循环链表的特性以及判断单链表是否有环(九)
- To_10_r_100_7---关于链表的环以及相交问题的整理
- android两个含有图片的TextView控件如何并列对称水平摆放
- mongodb查询的语法(大于,小于,大于或等于,小于或等于等等)
- Linux 硬链接与软链接(符号链接)
- 关于json解析
- ARM GPU 架构简介
- 链表的相交以及链表的循环的判断以及查找
- 数据库Sqlite-(Xcode7,ios9,objective-C)
- 求n以内的素数个数问题
- xcode7 launchImage设置启动图无效问题
- AVL树的简单实现
- soap使用实例
- android fragment hidenChanged方法分析
- 接入支付宝时遇到的问题
- spark helloworld (wordCount实现并按照词频排序)