#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Node
{
Elemtype data;
struct Node *Link;
}LNode,*LinkList;
int Create_L(LinkList &L,int n)
{
LinkList p,f;
int i;
L=(LinkList)malloc(sizeof(LNode));
L->data=0;
L->Link=NULL;
f=L;
printf("请输入链表中数值\n");
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->Link=NULL;
f->Link=p;
f=p;
}
}
void MergeList_L(LinkList La,LinkList Lb,LinkList &Lc)
{
LinkList pa,pb,s,pc;
int j=0;
pa=La->Link;
pb=Lb->Link;
Lc=La;
while(pa&&pb)
{
if((pa->data)<=(pb->data))
{
if(Lc->Link==pa)
{
pa=pa->Link;
j++;
}
else{ s=pa->Link;pa->Link=Lc->Link;Lc->Link=pa;pa=s;j++;
}
}
else
{
s=pb->Link;pb->Link=Lc->Link;Lc->Link=pb;pb=s;j++;
}
}
while(pa)
{
s=pa->Link;pa->Link=Lc->Link;Lc->Link=pa;pa=s;j++;
}
while(pb)
{
s=pb->Link;pb->Link=Lc->Link;Lc->Link=pb;pb=s;j++;
}
pc=Lc;
for( int i=1;i<=j;i++)
{
pc=pc->Link;
}
pc->Link=NULL;
free(Lb);
}
int Print_L(LinkList L)
{
LinkList g;
g=L->Link;
printf("合并后得到新链表为:");
while(g)
{
printf("%d ",g->data);
g=g->Link;
}
printf("\n");
}
int main()
{
int m,n;
printf("请输入链表a,b中数值个数\n");
scanf("%d %d",&m,&n);
LinkList La,Lb,Lc;
Create_L(La,m);
Create_L(Lb,n);
MergeList_L(La,Lb,Lc);
Print_L(Lc);
}