/*
* 游戏之作,原帖见http://bbs.bccn.net/thread-457592-1-1.html
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNodeTag
{
unsigned data;
struct LinkNodeTag *next;
}LinkNode, *LinkList;
/*
* 打印链表
*/
void PrintLink(LinkList l)
{
if (l == NULL)
{
printf("\n");
return;
}
printf("%5d", l->data);
PrintLink(l->next);
}
/*
* 创建无头节点链表
*/
LinkList InitLink(int n)
{
if (n == 0) return NULL;
LinkList s = malloc(sizeof(LinkNode));
scanf("%d", &s->data);
s->next = InitLink(n - 1);
return s;
}
/*
* 销毁链表
*/
void DestroyLink(LinkList l)
{
if (l != NULL) DestroyLink(l->next);
free(l);
}
/*
* 链表逆序
*/
LinkList ReverseLink(LinkList l)
{
LinkList p, q, s;
p = l;
if (p == NULL) return NULL;
q = p->next;
if (q == NULL) return p;
s = ReverseLink(q);
p->next = NULL;
q->next = p;
return s;
}
/*
* 链表合并
*/
LinkList CombineLink(LinkList a, LinkList b)
{
if (a == NULL) return b;
if (b == NULL) return a;
if (a->data < b->data)
{
a->next = CombineLink(a->next, b);
return a;
}
else
{
b->next = CombineLink(a, b->next);
return b;
}
}
/*
* 主函数
*/
int main(int argc, char *argv[])
{
int a_len, b_len;
scanf("%d%d", &a_len, &b_len);
LinkList a = InitLink(a_len);
LinkList b = InitLink(b_len);
PrintLink(a);
PrintLink(b);
LinkList c = CombineLink(a, b);
PrintLink(c);
c = ReverseLink(c);
PrintLink(c);
DestroyLink(c);
return 0;
}