思路
注意,两个单链表有公共结点意味着,只要有一个公共结点,那么后继的所有结点都是完全一样的。因此,两个单链表相当于“Y”的形状。由于两个链表长度不一定相等,所以算出长度差d之后,用较长的单链表遍历到第d个位置,然后两个表开始一起遍历,直到两个指针所指元素是同一个,也就是第一个公共结点,后面的所有结点都是公共结点。
代码
LinkList pub_node(LinkList L, LinkList Q){
int L_len=0,Q_len=0;
LNode *p=L->next,*q=Q->next;
while(p!=NULL){ //L的长度
p=p->next;L_len++;
}
while(q!=NULL){ //Q的长度
q=q->next;Q_len++;
}
//长度差值
if(L_len>Q_len){
while(L_len-Q_len--) p=p->next;
}else if(L_len<Q_len){
while(Q_len-L_len--) q=q->next;
}
while(p!=q){
p=p->next;q=q->next;
}
return p;
}