#include <stdio.h>
#include <stdlib.h>
#define N 20
typedef struct LNode
{ int data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreatList(LinkList &L,int n);
int GetElemList(LinkList &L,int i );
LinkList sortList(LinkList &L,int n);
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc);
LinkList CreatList(LinkList &L,int n)
{int i;
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;i--)
{p=(LinkList)malloc(sizeof(LNode));
p->data = rand()%100;
p->next=L->next;
L->next=p;
}
return(L);
}
int GetElemList(LinkList &L,int i )
{int j,e;
LinkList p;
p=L->next;
j=1;
while( p && j<i)
{
p=p->next; ++j;
}
if (!p|| j>i) return (0);
e = p->data;
return (e);
}
LinkList sortList(LinkList &L,int n)
{int i,j,t;
LinkList p,q;
for(i=0;i<n-1;i++)
{p=L->next;
q=L->next->next;
for(j=0;j<n-1-i;j++)
{if(p->data > q->data) {t=p->data; p->data=q->data; q->data=t;}
p=p->next; q=q->next;
}
}
for(i=1;i<=n;i++)
printf("%3d ",GetElemList(L,i));
printf("\n");
return(L);
}
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
{int i;
LinkList pa, pb, pc;
pa = La->next; pb = Lb->next;
Lc = pc = La;
while (pa && pb)
{
if (pa->data <= pb->data)
{
pc->next = pa; pc = pa; pa = pa->next;
}
else { pc->next = pb; pc = pb; pb = pb->next; }
}
pc->next = pa ? pa : pb;
free(Lb);
for(i=1;i<=N;i++)
printf("%3d ",GetElemList(Lc,i));
}
void main()
{LinkList La,Lb,Lc;
int n=10;
La=CreatList(La,n);
Lb=CreatList(Lb,n);
La=sortList(La,n);
Lb=sortList(Lb,n);
MergeList(La,Lb,Lc);
}