A與B鏈表合並成C鏈表(鏈表的歸並)
已知兩個有序遞增A鏈表和B鏈表(非空),將兩個鏈表合並為C鏈表(同為遞增有序),需要我們對鏈表的概念有一定掌握
對節點所需條件以及節點之間建立關系有所掌握。
這個題的重點是,並沒有說明兩個鏈表的具體長度,即兩個鏈表可能不一樣長,所以,在處理的時候需要注意,當某一個鏈表
操作完畢,另一個鏈表剩下的部分則可以直接接入C鏈表當中。
1 void merge(LNode *A,LNode *B,LNode *C) 2 { 3 LNode *p = A->next; //p來跟蹤A的最小值節點, 4 LNode *q = B->next; //q來跟蹤B的最小值節點 5 LNode *r; //定義一個指針,用作C鏈表的游標 6 C = A; //C指向A鏈表的頭結點 7 C->next = NULL; //這里可以去掉,因為下面兩個if必須有一個執行 8 free(B); //釋放掉B頭結點 9 r = C; //游標指向C頭結點 10 while(p!=NULL && q!=NULL) //當兩個鏈表其中一個沒有到達最后 11 { 12 if(p->data <= q->data) 13 { 14 r->next = p; 15 p = p->next; 16 r = r->next; 17 } 18 else{ 19 r->next = q; 20 q = q->next; 21 r = r->next; 22 } 23 } 24 r->next = NULL; //C鏈表最后next指針指向空 25 26 if(p!=NULL){ 27 r->next = p; 28 } 29 if(q!=NULL) 30 r->next = q; 31 }