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

思路:因为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 }

猜你喜欢

转载自www.cnblogs.com/ll-10/p/9698815.html