题目描述
难度:
重要性:
给定两个单链表,编写算法找出两个链表的公共节点。
LinkList Search_lst_Common(LinkList &L1,LinkList &L2){
int dist;
int len1=Length(L1),len2=Length(L2); //计算两个链表的表长
LinkList longList,shortList; //分别指向表长较长和表长较短的链表
if(len1>len2){ //L1表长较长
longList=L1->next;
shortList=L2->next;
dist=len1-len2; //表长之差
}else{ //L2表长较长
longList=L2->next;
shortList=L1->next;
dist=L2-L1; //表长之差
}
while(dist--){ //遍历掉较长链表的那部分 目的是为了同步遍历两链表表
longList=longList->next;
}
while(longList!=null){ //同步寻找共同节点
if(longList==shortList) //找到第一个公共节点
return longList;
else{ //继续同步寻找
longList=longList->next;
shortList=shortList->next;
}
return null;
}