1、 有两个单链表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,3,4};
部分函数代码请参考以下链接:https://blog.csdn.net/qq_50504109/article/details/120288749
#include<stdio.h>
#include"InstanceLinkList.c"
int main(){
LinkList MergeLinkList(LinkList LA,LinkList LB);
LinkList LA = creatLinkList();
LinkList LB = creatLinkList();
insert(LA,'2',1);
insert(LA,'2',2);
insert(LA,'3',3);
insert(LB,'1',1);
insert(LB,'3',2);
insert(LB,'3',3);
insert(LB,'4',4);
LinkList LC = MergeLinkList(LA,LB);
dispaly(LC);
}
LinkList MergeLinkList(LinkList LA,LinkList LB){
Node *pa,*pb;
Node *LC,*pc;
pa = LA->next;
pb = LB->next;
//下面这两步太妙了,我当时还在想要不要开辟一个空节点给LC,没想到答案给的是直接利用现成的,妙妙
LC = LA;
LC->next = NULL;
pc = LC;
// 条件是用 pa !=NULL 还是 pa->next != NULL 是看你的题目需要不要pa最后指向最后一个节点,还是指向空
while((pa != NULL) && (pb != NULL)){
if ( pa->data <= pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
}else{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
//如果pa有剩下,那么直接,把剩下的直接接过来就行
if (pa){
pc->next = pa;
}
if (pb){
pc->next = pb;
}
free(LB);//释放LB,LA被利用了
return LC;
}