鏈表習題(5)-給定兩個單鏈表,編寫算法找出兩個鏈表的公共結點


 1 /*給定兩個單鏈表,編寫算法找出兩個鏈表的公共結點*/
 2 /*
 3     算法思想:兩個鏈表有公共結點的話,那么從第一個公共結點開始,后面的結點都是相同的,不可
 4     能出現分叉。又由於兩個鏈表的長度不一定一樣,故不能同時遍歷兩個鏈表。
 5     可以先得到兩個鏈表的長度l1,l2,設l1-l2=k,那么在教長的鏈表上遍歷k個結點,在同步遍歷兩個鏈
 6     表,保證兩個鏈表同時到達最后一個節點,這樣也就保證了能夠同時到達第一個公共結點。
 7 */
 8 LinkList SearchFirstCommon(LinkList L1, LinkList L2)
 9 {
10     int len1 = getLength(L1), len2 = getLength(L2);    //獲取兩個線性表的長度
11     LinkList longList, shortList;        //用於指向教長,較短鏈表的第一個結點
12     int dist;
13     if (len1 > len2)
14     {
15         longList = L1->next;
16         shortList = L2->next;
17         dist = len1 - len2;
18     }
19     else
20     {
21         longList = L2->next;
22         shortList = L1->next;
23         dist = len2 - len1;
24     }
25     while (dist--)
26     {
27         longList = longList->next;
28     }
29     while (longList!=NULL)
30     {
31         if (longList == shortList)    //找到公共結點,返回
32             return longList;
33         else
34         {
35             longList = longList->next;
36             shortList = shortList->next;
37         }
38     }
39     return NULL;    //沒有公共結點
40 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM