链表合并问题(一)

设计将两个递增有序带头结点链表合并为一个有序递减的链表


void MergeList(LinkList & La,LinkList & Lb){

LNode *r,*pa=La->next, *pb=Lb->next;

//分别是表La和Lb的工作指针

La->next = NULL;

//La作为结果链表的头指针,先将结果链表初始化为空

while(pa&&pb){

//当两链表均不为空时,循环

if(pa->data<=pb->data){

r=pa->next;

//r暂存pa的后继结点指针

pa->next=La->next;

La->next=pa;

//将pa结点链于结果表中,同时逆置

pa=r;

//恢复pa为当前待结点

}else{

r=pb->next;

//r暂存pb的后继结点指针

pb->next=La->next;

//将pb结点链于结果表中,同时逆置

La->next=pb;

//恢复pb为当前待结点

pb=r;

}

if(pa)

pa=pb;

//通常情况下会剩一个链表非空,处理剩下的部分

while(pb){

//处理剩下的一个非空链表

r=pb->next;

//依次插入到La中

pb->next=La->next;

La->next=pb;

pb=r;

}

Free(Lb);

}

}

你可能感兴趣的:(链表合并问题(一))