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 }