寻找两个链表的首个公共结点
两个链表有公共结点,由于结点的next域的唯一性,意味着从该结点以后,两个链表重合。即两个链表的拓扑形状呈现Y形。
找到首个公共结点的步骤:
- 获得两个链表的长度len1,len2
- 计算两个链表的长度差dist
- 长的链表先遍历到第dist个结点,此时长短链表可以同步向前走
- 同步寻找公共结点
- 找不到返回null
算法如下:
1 Linklist Search_Common(Linklist &L1,Linklist &L2){ 2 len1=Length(L1); 3 len2=Length(L2); 4 Linklist long,short; 5 if(len1>len2){ 6 dist = len1-len2; 7 long=L1->next;//带头结点 8 short=L2->next; 9 } 10 else 11 { 12 dist=len2-len1; 13 long=L2->next; 14 short=L1->next; 15 } 16 while(dist > 0) 17 { 18 long = long->next; 19 dist--; 20 } 21 while(long) 22 { 23 if(long==short) 24 return long; 25 else 26 { 27 long=long->next; 28 short=short->next; 29 } 30 } 31 return NULL; 32 }

浙公网安备 33010602011771号