问题一:(引用编程之美)如果两个链表相交,则尾节点一定是公共的
问题二:
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 //将指向长列表的指针前移一定距离d 21 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 }
时间: 2024-11-08 16:47:28