如果学过归并排序更容易理解,合并过程和归并排序和并过程相同,只是链表和数组的区别。
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}node,*headlist;
main()
{
int x;
headlist LA,LB,LC;
node *pa,*pb,*r,*pnew;
LA=(headlist)malloc(sizeof(node));
LB=(headlist)malloc(sizeof(node));
LA->next=NULL;
LB->next=NULL;
r=LA;
scanf("%d",&x);
while(x!=-1)
{
pnew=(node*)malloc(sizeof(node));
pnew->data=x;
r->next=pnew;
r=pnew;
scanf("%d",&x);
}
r->next=NULL;
//fenge
r=LB;
scanf("%d",&x);
while(x!=-1)
{
pnew=(node*)malloc(sizeof(node));
pnew->data=x;
r->next=pnew;
r=pnew;
scanf("%d",&x);
}
r->next=NULL;
LC=LA; //以LA作为新的链表的表头
pa=LA->next;
pb=LB->next;
r=LC;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
r->next=pa;
r=pa;
pa=pa->next;
}
else{
r->next=pb;
r=pb;
pb=pb->next;
}
}
if(pa) r->next=pa;
else r->next=pb;
free(LB);
pa=LA->next;
while(pa!=NULL)
{
printf("--%d",pa->data);
pa=pa->next;
}
}