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

Posted 廉江宏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将两个有序链表合并,合并后仍然有序相关的知识,希望对你有一定的参考价值。

 

思路:因为A,B链表中元素有序,要使归并后的C也有序,可以每次从A、B中挑出最小的元素插入C的尾部,这样循环插入完成后,C也一定是有序的。

 1 struct LinkList{
 2     int data;
 3     LinkList *next;
 4 }
 5 
 6 void Merge(LinkList *A,LinkList *B,LinkList *&C)
 7 {
 8     LinkList *p = A->next;    // 定义p结点跟踪 A中的结点
 9     LinkList *q = B->next;    // 定义q结点跟踪 B中的结点
10 
11     C = A;
12     C->next = NULL;
13     free(B);
14     
15     LinkList *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 }

 

以上是关于将两个有序链表合并,合并后仍然有序的主要内容,如果未能解决你的问题,请参考以下文章

合并有序链表

链表:合并两个有序的链表

多个有序链表的合并

连个有序列表合并

合并有序两个单链表,合并后链表依然有序

合并有序两个单链表,合并后链表依然有序