问题
多项选择题
有两个单链表La和Lb,La中有m个元素,Lb中的元素个数为n。已知两个链表均为递增的单向链表。现想将两个链表归并成一个递增的单向链表,且希望利用原来的结点空间,请回答下列问题:
写出算法的实现函数;
答案
参考答案:算法的实现如下:
链表结点定义为:
struct node{
int value;
struct node * Next;
};
struct node * merge( struct node *a, struct node *b){
struct node *p;
struct node *q;
struct node *t;
if(a->value<=b->value){ //比较当前指针所指值的大小
p=a;
q=b;
} else{
p=b;
q=a;
}
t=p;
while(q){ //如果b链表先结束,那么将a链表剩余结点全部合并到新链表
if(p->Next==NULL){
p->Next=q;
break;
}
if(q->value<p->Next->value){
struct node * k=q->Next;
q->Next=p->Next;
p=p->Next;
q=k;
continue;
}
p=p->Next;
}
return t:
}