题目描述
将两个递增的有序链表合并为一个递减的有序链表,要求仍使用原来的存储空间,允许有重复数据
算法思想
两个递增合成一个递减,利用头插法,这样就可以继续从小到大插入数据,而新链表中的数据顺序是从大到小的,一个链表为空时,可以直接将另一个链表剩余的数据链接在新链表的最后
代码演示
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
pa=La->next;
pb=Lb->next; //将pa,pb初始化为La,Lb的首元结点
pc=Lc=pa; //用La的头结点作Lc的头结点
while(pa&&pb){ //La和Lb都不为空
if(pa->date<=pb->date){ //头插法,插入较小的数据,为递减排序
q=pa;
pa->next=Lc->next;
Lc->next=pa;
pa=q->next;
}
else{
q=pb;
pb->next=Lc->next;
Lc->next=pb;
pb=q->next;
}
}
while(!pa){ //La为空,将Lb剩余的数据头插在Lc最后
q=pb;
pb->next=Lc->next;
Lc->next=pb;
pb=q->next;
}
while(!pb){ //Lb为空,将La剩余的数据头插在Lc最后
q=pa;
pa->next=Lc->next;
Lc->next=pa;
pa=q->next;
}
delete Lb; //删除Lb头结点
}