//单链表的归并
#include "stdio.h"
#include "stdlib.h"
typedef struct Node{
int elem;
struct Node *next;
}Node,*NodePtr;
typedef Node ListHead,*ListHeadPtr;
void List_init(ListHeadPtr L){
int len = L->elem;
NodePtr p,q;
q = L;
for(int i = 0;i < len;i++){
p = (NodePtr)malloc(sizeof(Node));
scanf("%d",&p->elem);
p->next = NULL;
q->next = p;
q = p;
}
}
void List_Union(ListHeadPtr la,ListHeadPtr lb,ListHeadPtr lc){
ListHeadPtr p,q,r,f;
p = la->next;
q = lb->next;
r = lc;
lc->elem = la->elem + lb->elem;
while(p && q){
if(p->elem <= q->elem)
{
f = p;
p = p->next;
f->next = r->next;
r->next = f;
}
else
{
f = q;
q = q->next;
f->next = r->next;
r->next = f;
}
}
if(p == NULL)
{
while(q)
{
f = q;
q = q->next;
f->next = r->next;
r->next = f;
}
}
else
{
while(p)
{
f = p;
p = p->next;
f->next = r->next;
r->next = f;
}
}
}
void List_Print(ListHeadPtr L){
ListHeadPtr p;
p = L->next;
for(int i = 0;i < L->elem;i++)
{
printf("%d ",p->elem);
p = p->next;
}
}
void List_Free(ListHeadPtr L){
int i = L->elem;
NodePtr p = L->next;
NodePtr q;
while(i>0){
q = p->next;
free(p);
if(q == NULL)
break;
else
{
p = q;
i--;
}
}
free(L);
}
int main(){
ListHeadPtr la,lb,lc;
la = (ListHeadPtr)malloc(sizeof(ListHead));
lb = (ListHeadPtr)malloc(sizeof(ListHead));
lc = (ListHeadPtr)malloc(sizeof(ListHead));
lc->next = NULL;
scanf("%d %d",&la->elem,&lb->elem);
List_init(la);
List_init(lb);
List_Union(la,lb,lc);
List_Print(lc);
List_Free(lc);
free(la);
free(lb);
return 0;
}