假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。试编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来的两个单链表结点存放归并后的单链表。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node*next;
}Node,*LinkList;
void create(LinkList*l,int n)
{
LinkList p,s;
p=*l=(LinkList)malloc(sizeof(Node));
for(;n>0;n--)
{
s=(LinkList)malloc(sizeof(Node));
scanf("%d",&s->data);
p->next=s,p=s;
}
p->next=NULL;
}
void shuchu(LinkList l)
{
LinkList p=l->next;
while (p!=NULL){
printf("%d ",p->data);
p=p->next;
}
}
LinkList merge( LinkList la,LinkList lb)
{ Node*pa;
Node*pb;
Node*s;
LinkList lc;
pa=la->next;
pb=lb->next;
lc=la;
lc->next=NULL;
while(pa&&pb)
{
if(pa->data<=pb->data){
s=pa;pa=pa->next;
s->next=lc->next;//头插法
lc->next=s;
}
else{
s=pb;pb=pb->next;
s->next=lc->next;
lc->next=s;
}
}
while(pa){
s=pa;
pa=pa->next;
s->next=lc->next;
lc->next=s;
}
while(pb)
{
s=pb;
pb=pb->next;
s->next=lc->next;
lc->next=s;
}
free(lb);
return(lc);
}
int main()
{
LinkList la,lb;
int n,m;
la=(LinkList)malloc(sizeof(Node));
scanf("%d%d",&n,&m);
create(&la,n);
create(&lb,m);
shuchu(merge(la,lb));
return 0;
}