寻找两个链表的首个公共结点

两个链表有公共结点,由于结点的next域的唯一性,意味着从该结点以后,两个链表重合。即两个链表的拓扑形状呈现Y形。

找到首个公共结点的步骤:

  1. 获得两个链表的长度len1,len2
  2. 计算两个链表的长度差dist
  3. 长的链表先遍历到第dist个结点,此时长短链表可以同步向前走
  4. 同步寻找公共结点
  5. 找不到返回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 }

 

posted @ 2020-08-20 17:15  Pig2pignb  阅读(152)  评论(0)    收藏  举报