数据结构
两个递增有序列表合并为一个递增的有序链表(要求:不占用多余存储空间,新链中不允许有重复元素)
求解思路
- 假设两个需要和合并的链表为La和Lb,合并后的头指针用Lc来代替。设置pa,pb分别为La,Lb的工作指针,pc用来保证新链的完整性。
Lnode mergelist(LinkList &a,LinkList &b){
LinkList *Lc = new Lnode;
Lnode *pa,*pb,*pc;
pa = La->next;
pb = Lb->next;
pc = Lc = La;
while (pa&&pb){
else {
pc->next=pa;
pc=pa;
pa=pa->next;
q=pb->next;
delete pb;
pb = q;
}
- 注意:delete 删除pb时,删除的是pb指向的内容而不是pb这个指针变量
- 剩下就是连接未遍历完成的链,再删除Lb头指针即可。
pc->next = pa?pa:pb;
delete Lb;
完整代码如下:
Lnode *mergelist(LinkList &a,LinkList &b){
LinkList *Lc = new Lnode;
Lnode *pa,*pb,*pc;
pa = La->next;
pb = Lb->next;
pc = Lc = La;
while (pa&&pb){
if(pa->data<pb->data){
pc->next = pa;
pc=pa;
pa=pa->next;
}
else if(pa->data>pb->data){
pc->next = pb;
pc=pb;
pb=pb->next;
}
else {
pc->next=pa;
pc=pa;
pa=pa->next;
q=pb->next;
delete pb;
pb = q;
}
}
pc->next = pa?pa:pb;
delete Lb;
return Lc;
}