将两个有序链表并为一个有序链表

来源:互联网 发布:开淘宝零食店 编辑:程序博客网 时间:2024/05/28 16:20

按照算法MergeList的思想,需设立3个指针pa,pb,pc,其中pa和pb分别指向La表和Lb表中当前比较插入的结点,而pc指向Lc表中当前最后一个结点,若pa->data<=pb->data,则将pa所指结点链接到pc所指结点之后,否则将pb所指结点链接到pc所指结点之后。显然,指针的初始状态:当LA和LB为非空表时,pa和pb分别指向La和Lb表中第一个结点,否则为空;pc指向空表Lc中的头结点。由于链表的长度为隐含的,则第一个循环执行的条件是pa和pb皆非空,当其中一个为空时,说明有一个表的元素已归并完,则只要将另一个表中的剩余链接在pc所指结点之后即可。

“`
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){
//已知单链线性表La和Lb的元素按值非递减排列。
//归并La和Lb得到新的单链线性表Lc,Lc元素也按值非递减排列。
pa=La->next; pb=Lb->next;
Lc=pc=La; //用La的头结点作为Lc的头结点
while(pa&&pb){
if(pa->data<=pb->data){
pc->next=pa;pc=pa;pa=pa->next;
}
else{pc->next=pb;pc=pb;pb=pb->next;}
}
pc->next=pa?pa:pb; //插入剩余段
free( Lb); //释放Lb的头结点
}//MergeList_L

0 0
原创粉丝点击