A與B鏈表合並成C鏈表(鏈表的歸並)


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 }

 


免責聲明!

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



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