将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。
void MergeList(LinkList& La, LinkList& Lb, LinkList& Lc, )
{//合并链表La和Lb,合并后的新表使用头指针Lc指向
pa=La->next; pb=Lb->next;
//pa和pb分别是链表La和Lb的工作指针,初始化为相应链表的第一个结点
Lc=pc=La; //用La的头结点作为Lc的头结点
Lc->next=NULL;
while(pa||pb )
{//只要存在一个非空表,用q指向待摘取的元素
if(!pa) {
q=pb;
pb=pb->next;
}
//La表为空,用q指向pb,pb指针后移
else if(!pb) {
q=pa;
pa=pa->next;
}
//Lb表为空,用q指向pa,pa指针后移
else if(pa->data<=pb->data) {
q=pa;
pa=pa->next;
}
//取较小者(包括相等)La中的元素,用q指向pa,pa指针后移
else {
q=pb;
pb=pb->next;
}
//取较小者Lb中的元素,用q指向pb,pb指针后移
q->next = Lc->next;
Lc->next = q;
//将q指向的结点插在Lc 表的表头结点之后
}
delete Lb; //释放Lb的头结点
}