如何将两个递增的有序链表合并为一个递增的有序链表?

2024年11月29日 07:59
有1个网友回答
网友(1):

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的头结点

while(pa && pb)

{

if(pa->datadata){

pc->next=pa;

pc=pa;

pa=pa->next;

}

//取较小者La中的元素,将pa链接在pc的后面,pa指针后移

else if(pa->data>pb->data) {

pc->next=pb;

pc=pb; 

pb=pb->next;

}

//取较小者Lb中的元素,将pb链接在pc的后面,pb指针后移

else //相等时取La中的元素,删除Lb中的元素

{

pc->next=pa;

pc=pa;

pa=pa->next;

q=pb->next;

delete pb ;

pb =q;

}

}

pc->next=pa?pa:pb;    //插入剩余段

delete Lb;            //释放Lb的头结点