日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将两个有序链表合并,合并后仍然有序

發布時間:2025/4/16 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将两个有序链表合并,合并后仍然有序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

思路:因為A,B鏈表中元素遞增有序,要使歸并后的C也遞增有序,可以每次從A、B中挑出最小的元素插入C的尾部,這樣循環插入完成后,C也一定是遞增有序的。

需要注意的點是,A、B中的元素有可能一個已經全部被插入到C中,而另一個還沒插完。

1 struct LNode{ 2 int data; 3 LNode *next; 4 } 5 6 void Merge(LNode *A,LNode *B,LNode *&C) 7 { 8 LNode *p = A->next; // 定義p結點跟蹤 A中的結點 9 LNode *q = B->next; // 定義q結點跟蹤 B中的結點 10 11 C = A; 12 C->next = NULL; 13 free(B); 14 15 LNode *r = C; // 定義一個跟蹤結點,永遠指向C的終端結點 16 17 while(p!=NULL&&q!=NULL){ 18 if(p->data <= q->data){ 19 r->next = p; 20 p = p->next; 21 r = r->next; 22 }else{ 23 r->next = q; 24 q = q->next; 25 r = r->next; 26 } 27 } 28 29 if(p!=NULL) r->next = p; 30 if(q!=NULL) r->next = q; 31 }

?

如果題這樣改:A、B遞增有序,合并成C后,C遞減有序,怎么做?? ? 前面題用的是尾插法插入元素,如果使用頭插法插入元素,就可以得到一個遞減序列。

1 struct LNode{ 2 int data; 3 LNode *next; 4 } 5 6 void merge(LNode *A,LNode *B,LNode *&C) 7 { 8 LNode *p = A->next; 9 LNode *q = B->next; 10 LNode *s; 11 C = A; // 使用A的頭結點作為C的頭結點,然后建立一個空鏈表 12 C->next= NULL; 13 free(B); // 釋放B的頭結點 14 15 while(p!=NULL&&q!=NULL){ 16 if(p->data<=q->data){ 17 s = p; 18 p = p->next; 19 s->next = C->next; 20 C->next = s; 21 }else{ 22 s = q; 23 q = q->next; 24 s->next = C->next; 25 C->next = s; 26 } 27 } 28 while(p!=NULL){ 29 s = p; 30 p = p->next; 31 s->next = C->next; 32 C->next = s; 33 } 34 while(q!=NULL){ 35 s = q; 36 q = q->next; 37 s->next = C->next; 38 C->next = s; 39 } 40 }

?

轉載于:https://www.cnblogs.com/ll-10/p/9698815.html

總結

以上是生活随笔為你收集整理的将两个有序链表合并,合并后仍然有序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。