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