标签:单链表相交 链表相交 首次相交 相交结点 单链表相交结点
题目:有两个带头结点的单链表L1,L2,判断它们是否相交(它们中是否有相同的结点)
ADT定义如下
#define ElemType char
typedef struct LNode{
ElemType data;
LNode *next;
}LNode,*LinkList;
我的一篇博文有写出它们的具体实现:单链表是否相交
解题思路:
当L1与L2相交时,若L1与L2中都没有环,那么求出两个单链表中结点个数之差的绝对值dCount,让结点个数多的单链表从头结点开始往下走dCount步,让结点个数少的单链表从头结点开始往后走,然后同时让两个单链表每次往后走一步,直到他们相等,那么这个结点就是首次相交的结点。若L1与L2中都有环,求出单链表L1与L2从头结点到环入口结点的结点总个数count,求出两者之差的绝对值,让count大的单链表从头结点开始往下走dCount步,让count大的的单链表从头结点开始往后走,然后同时让两个单链表每次往后走一步,直到他们相等,那么这个结点就是首次相交的结点。
算法实现:
LNode* searchFirstIntersectNode(LinkList &L1,LinkList &L2)PS:此时searchFirstIntersectNode()方法中的参数不是引用类型,因为L1与L2中都有环,会将L1与L2都转变成没有环的单链表,这个过程会改变L1与L2,但是我们不希望这个改变对原始的L1和L2进行改变,所以参数没有用引用类型
标签:单链表相交 链表相交 首次相交 相交结点 单链表相交结点
原文地址:http://blog.csdn.net/lavor_zl/article/details/42644323