#include <bits/stdc++.h>
typedef int ElemType;
#define Status int
#define ERROR 0
#define OK 1
using namespace std;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status GetElem_L(LinkList L,int i,ElemType &e)
{
LinkList p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
if(!p)
return ERROR;
j++;
}
e=p->data;
return OK;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LinkList p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
j++;
if(!p)return ERROR;
}
LinkList s=(LinkList)malloc(sizeof(LNode));
s->next=p->next;p->next=s;
s->data=e;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
LinkList p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;j++;
if(!p) return ERROR;
}
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
void mpsort(LinkList &LL)
{
int a[1000],cnt=0;
LinkList p=LL->next;
while(p)
{
a[cnt++]=p->data;
p=p->next;
}
sort(a,a+cnt);
LinkList q=(LinkList)malloc(sizeof(LNode));
q->next=NULL;
for(int i=0;i<cnt;i++)
ListInsert_L(q,i+1,a[i]);
LL=q;
//free(q);
}
void Mergelist(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LinkList pa,pb,pc;
pa=La->next;
pb=Lb->next;
int cnt=1;
while(pa&&pb)
{
if((pa->data)<=(pb->data))
{
ListInsert_L(Lc,cnt++,pa->data);
pa=pa->next;
}
else
{
ListInsert_L(Lc,cnt++,pb->data);
pb=pb->next;
}
}
while(pa)
{
ListInsert_L(Lc,cnt++,pa->data);
pa=pa->next;
}
while(pb)
{
ListInsert_L(Lc,cnt++,pb->data);
pb=pb->next;
}
}
int main()
{
LinkList L=(LinkList)malloc(sizeof(LNode));
LinkList L1=(LinkList)malloc(sizeof(LNode));
LinkList L2=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
L1->next=NULL;
L2->next=NULL;
for(int i=1;i<8;i++)
ListInsert_L(L,1,i);
for(int i=5;i<13;i++)
ListInsert_L(L1,1,i);
mpsort(L);
mpsort(L1);
LinkList p=L->next;
while(p)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
p=L1->next;
while(p)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
Mergelist(L,L1,L2);
p=L2->next;
while(p)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<endl;
return 0;
}