12-3-30关于链表相交

转载 2012年03月30日 13:31:28

1判断链表是否有环?

bool IsExitsLoop(sList *head){
sList *slow=head;
sList *fast=head;
while(fast && fast->next){
slow=slow->next;
fast=fast->next->next;
if(slow==fast) break;
}


return !(fast == NULL || fast->next==NULL);
}


2 找环的入口点

设整个链表长度为L,环长度为r,入口环与相遇点距离为x,起点到环入口点的距离为a。

对于slow走了s,则fast走了2s

s=a+x;

2s=a+nr+x;

==>a+x=nr;

设相遇点到入口环的距离为y=r-x,==>a=(n-1)r+y 

因此我们设定一个指针p,指向相遇点,指针q从head出发,这样他们一定会在环入口相遇,由此我们得到环入口


sList *findLoopPort(sList *head){
sList *slow=head,*fast=head;
while(fast && fast->next){
slow=slow->next;
fast=fast->next->next;
if(slow==fast) break;
}


if(fast==NULL || fast->next==NULL){
return (sList *)NULL;
}


slow=head;
while(slow!=fast){
slow=slow->next;
fast=fast->next;
}
return slow;
}


3判断两个链表是否相交(链表不存在环)

 方法一:

将其中一个链表,首尾相连,检测两外一个链表是否有环,如果存在,则代表两个链表相交,检测出来的环入口点,即为相交点

方法二:

如果两个链表相交,则从相交点开始,到链表结束都是相同的节点,我们可以先遍历一个链表直到尾部,再遍历一个链表,如果也走到相同的尾部,则相交。

此时我们记录两个链表的length,利用length1-length2,然后这样使得两个链表出发点到相交点长度是一致的,之后两个链表指针相同步伐前进,相遇的第一个点为

相交点。



相关文章推荐

每日一题3:判断单链表是否相交

由于单链表的特殊性,如果某一链表与另一链表相交,那么从相交的节点开始,以后两个链表的每个节点都相同,因此判断两个链表是否相交,只需判断每条链表的最后一个节点是否相同即可!#include "stdaf...

判断两个链表是否相交

  • 2013-09-05 21:05
  • 215KB
  • 下载

两个链表相交,要求找出第一个相交的节点

《编程之美》里面有一篇是讲如何判断两链表是否相交,读后觉得原文太过啰嗦。于是,笔者总结了一下,此类问题可以扩展为两大类,分别是: 1、单链表与环问题http://blog.csdn.net/liux...

编程判断两个链表是否相交

《编程之美》3.6节:判断两个链表是否相交 问题:给出两个单项链表的头指针,判断这两个链表是否相交,假设都不带环。 解法:遍历第一个链表至尾节点,然后遍历第二个链表,如果尾节点和刚才相同,则说明相...

链表相交

给定两个单链表,表头分别为head1和head2.判断两个链表是否相交,如果不相交返回null,如果相交,则给出相交的第一个交点。 对题目进行简单分析后不难得出,因为链表的特殊存储结构,使得其在存储...

第12题 判断两个链表是否相交

题目:判断两个链表是否相交 分析:如果被问道此问题,一定要分两种情况回答,第一种是链表不存在环,第二种就是存在环的情况 1. 先判断带不带环 2. 如果都不带环,就判断尾节点是否...

无环单链表判相交练习

现在有两个无环单链表,若两个链表的长度分别为m和n,请设计一个时间复杂度为O(n + m),额外空间复杂度为O(1)的算法,判断这两个链表是否相交。 给定两个链表的头结点headA和headB,请返...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)