
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表;空链表将输出NULL */
List Merge( List L1, List L2 );
int main()
{
List L1, L2, L;
L1 = Read();
L2 = Read();
L = Merge(L1, L2);
Print(L);
Print(L1);
Print(L2);
return 0;
}
List Read(){
int n;
scanf("%d",&n);
List head = (List)malloc(sizeof(PtrToNode));
head ->Next = NULL;
if(n){
List temp = head;
for(int i=0;i<n;i++){
List p = (List)malloc(sizeof(PtrToNode));
scanf("%d",&(p->Data));
temp ->Next = p;
temp = p;
}
temp ->Next = NULL;
}
return head;
}
void Print( List L ){
L = L->Next;
if(L==NULL){
printf("NULL");
}
else {
while(L){
printf("%d ",L ->Data);
L = L->Next;
}
}
printf("\n");
}
List Merge( List L1, List L2 ){
List pa = L1 ->Next;
List pb = L2 ->Next;
List L = (List)malloc(sizeof(List));
List r = L;
while(pa != NULL&&pb != NULL){
if(pa ->Data < pb ->Data){
r ->Next = pa;
r = pa;
pa = pa->Next;
}
else{
r ->Next = pb;
r = pb;
pb = pb ->Next;
}
}
r ->Next = pa?pa:pb;
L1 ->Next = NULL;
L2 ->Next = NULL;
return L;
}