给定两个单链表,编写算法找出两个链表的公共结点。
若两个链表有一个公共结点,则该公共结点之后的所有结点都是重合的。如果存在公共结点,那么两个链表必定有相同的尾结点。但由于两个链表的长度可能不同,假设长度之差为 n,则首先令较长的链表遍历 n 步,这样使得两个链表能够同时到达尾结点。不难想出,由此对两个链表同时向后遍历,找到的第一个相同的结点即为第一个公共结点。
LinkList Search(LinkList l1,LinkList l2){
int len1 = Length(l1),len2 = Length(l2),len;
LinkList lList,sList;
if(len1 > len2){
lList = l1->next;
sList = l2->next;
len = len1-len2;
}
else{
lList = l2->next;
sList = l1->next;
len = len2-len1;
}
while(len--){
lList = lList->next;
}
while(lList){
if(lList==sList) return lList;
else{
lList = lList->next;
sList = sList->next;
}
return NULL;
}