首页 > 代码库 > 判断两个链表是否相交;查找两个链表的第一个公共节点

判断两个链表是否相交;查找两个链表的第一个公共节点

问题一:(引用编程之美)如果两个链表相交,则尾节点一定是公共的

问题二:

 1 int listLength(node* list){ 2     int length=0; 3     while(list!=NULL){ 4         length++; 5         list=list->next; 6     } 7     return length; 8 } 9 //10 node* firstComNode(node* list1,node* list2){11     int n1=listLength(list1);12     int n2=listLength(list2);13     //定义指针pLong,pShort,分别指向长列表和短列表14     node* pLong=list1;15     node* pShort=list2;16     if(n1<n2){17         pLong=list2;18         pShort=list1;19     }20     //将指向长列表的指针前移一定距离d21     int d=((n1-n2)>0)?(n1-n2):(n2-n1);22     while(d--){23         pLong=pLong->next;    24     }25     //两个指针同时向尾部遍历,查找第一个相同的节点26     while(pLong!=NULL && pLong!=pShort){27         pLong=pLong->next;28         pShort=pShort->next;29     }30     return pLong;31 }

 

判断两个链表是否相交;查找两个链表的第一个公共节点