归并操作是常见的自命题考点。两类:破坏以及保留。
例子一:现有两个增序链表la,lb。讲公共节点插入la,其余释放
算法思想:从第一个链表处开始比较,用pa扫描la,pb扫描lb所指向节点数值较小,则向后扫描,释放非公共节点,若遇到相同节点,则尾插入la,释放lb中公共节点。比较完成之后,若链表有剩余,则顺序扫描,依次释放::
linklist union(linklist &la,linklist &lb){
lnode*pa=la->next,*pb=lb->next;
lnode* pre=la,*r;
while(pa!=NULL&&pb!=n){
if(pa-data<pa-。data){
r=pa;
pa=pa->next;
free(pa);
}
els if(pa->data>pa->data){
r=pb;
pb=pb->next
free(pb);
}
else{
pre-next=pa;
q=pb;
pre=pa;
pa=pa->next;
pb=pb->next;
free(r);
}
}
while(pa!=NULL){
r=pa;
pa=pa-next;
free(r);
}
while(pb!=NULL){
r=pb;
pb=pb-next;
free(r);
}
}