1 /*將兩個遞增單鏈表合並成一個遞減單鏈表*/ 2 /* 3 算法思想:兩個鏈表已經按元素值遞增次序排序,將其合並時,均從第一個結點起進行比較,將較小的 4 結點鏈入鏈表中,同時后移工作指針。由於結果鏈表是遞減的,故使用頭插法建立新鏈表。比較結束后, 5 可能會有一個鏈表非空,此時用頭插法將剩下的結點依次插入新鏈表中即可。 6 */ 7 void Union_List(LinkList& La,LinkList& Lb) 8 { 9 LNode *r, *pa = La->next, *pb = Lb->next; //pa,pb分別是La,Lb的工作指針 10 La->next = NULL; //將La作為結果鏈表的頭指針 11 while (pa&&pb) 12 { 13 if (pa->data <= pb->data) 14 { 15 r = pa->next; //r暫存pa的后繼結點指針 16 pa->next = La->next; //頭插法插入pa所指結點 17 La->next = pa; 18 pa = r; 19 } 20 else 21 { 22 r = pb->next; 23 pb->next = La->next; 24 La->next = pb; 25 pb = r; 26 } 27 while (pa) //處理剩下的結點 28 { 29 r = pa->next; 30 pa->next = La->next; 31 La->next = pa; 32 pa = r; 33 } 34 while (pb) 35 { 36 r = pb->next; 37 pb->next = La->next; 38 La->next = pb; 39 pb = r; 40 } 41 } 42 free(Lb); 43 }