两个链表相交,查找两个链表的公共节点
eg:
两个链表分别是:
L1: 1->1->2->3->5->4->5
L2: 1->2->3->4->5
公共节点为4
链表L1的长度为7,链表L2的长度为5,L1先走7-5=2个节点后,两个链表同步移动,那么第一个相同地址的节点即为相交节点。
code
int findFirstCommonNode(ElemSN *h1,ElemSN *h2){
if(h1==NULL||h2==NULL){
return -1;
}
int l1 = 0,l2 = 0;
while(h1!=NULL||h2!=NULL){
if(h1!=NULL){
l1++;
h1 = h1->next;
}
if(h2!=NULL){
l2++;
h2 = h2->next;
}
}
int n = l1-l2;
while (n!=0) {
if(n>0){
n--;
h1=h1->next;
}else{
n++;
h2=h2->next;
}
}
// 此时两个链表的长度一致,所以合法性只需要判断任意一个就可以
// 如果两个链表的节点地址想同,说明该节点即为第一个公共节点
while (h1!=NULL&&h1!=h2) {
h1 = h1->next;
h2 = h2->next;
}
// 说明两个链表没有公共节点
if(h1==NULL){
return -1;
}
return h1->data;
}
网友评论