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...

编程之美-3.6-编程判断两个链表是否相交

1. 简述     给出两个链表的头指针,比如h1,h2,判断这两个链表是否相交。这里是为了简化问题,我们假设两个链表不带环。     扩展:如果链表可能有环呢?     扩展:如何求出两个相交...
  • eric43
  • eric43
  • 2012年06月22日 14:32
  • 581

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

给出两个单向链表的头指针,比如h1、h2,判断这两个链表是否相交。这里为了简化问题,我们假设两个链表均不带环。 扩展问题: 1.如果链表可能有环呢? 2.如果我们需要求出两个链表相交的第一个...

如何判断两个单向链表是否有相交,并找出交点

http://blog.chinaunix.net/uid-20754793-id-177773.html 判断两个链表是否相交:(假设两个链表都没有环) 1、判断第一个链表的每个节点是否在第...
  • jeffasd
  • jeffasd
  • 2016年06月01日 23:26
  • 473

《C语言实现链表相交、带环问题》

例题://1.判断单链表是否带环?若带环,求环的长度?求环的入口点? //2.判断两个链表是否相交,若相交,求交点。(假设链表不带环) //3.判断两个链表是否相交,若相交,求交点。(假设链表可能带环...

面试题----判断两个链表是否相交(可能带环)

判断两个链表是否相交(可能带环):这个问题我们可以根据是否带环来分三种情况,情况一:两个链表都不带环;   情况二:其中有一个链表带环;   情况三:两个链表都带环。 下面我用一张图片来进行更详细的分...

【面试题】-判断两个单链表是否相交并求出相交的第一结点

问题描述判断两个单链表是否相交,如果相交,给出相交的第一个点(假设两个链表都不存在环)。相交的链表示意图如下所示。 解题思路方法一两个没有环的链表如果是相交于某一结点,如上图所示,这个结点后面都是共...
  • zwhlxl
  • zwhlxl
  • 2015年05月15日 15:53
  • 1247

寻找两个相交链表的第一个公共节点

//寻找两个相交链表的第一个公共节点 // 寻找两个链表的第一个公共节点.cpp : Defines the entry point for the console application. //...

经典面试题:链表的相交与环问题

1、 给出两个单向链表的头指针pHead1和pHead2,判断这两个链表是否相交。假设两个链表均不带环。  示意图如下: 如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链...
  • wisgood
  • wisgood
  • 2014年02月23日 14:44
  • 721

算法导论第21章 不相交集合 链表表示

一个不相交数据结构维护了一个不相交动态集的集合S = {S1, S2,,,,,Sn},用一个代表来标示每个集合,这个代表是集合中的任意一个元素。 支持一下三种操作: 1、MakeSet(x):建立一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:12-3-30关于链表相交
举报原因:
原因补充:

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