#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;
// 初始化链表
bool InitList(LinkList *L) // 二级指针
{
*L = (LinkList)malloc(sizeof(Node)); //产生头结点,并使L指向此头节点
if (!(*L)) // 存储分配失败
return false;
(*L)->next = NULL;
return true;
}
void CreateFromTail(LinkList L)
{
Node *r, *s;
int temp;
r = L; // r指向链表的当前表尾,其初值指向头节点
while (1)
{
scanf("%d", &temp);
if (temp == -1)
{
r->next = NULL;
break;
}
s = (Node*)malloc(sizeof(Node)); // 建立新结点s
s->data = temp;
r->next = s;
r = s;
}
}
// 遍历链表
void PrintList(LinkList L)
{
bool flag = true;
Node *p;
p = L->next;
while (p)
{
if (flag)
{
printf("%d", p->data);
flag = false;
}
else
printf(" %d", p->data);
p = p->next;
}
printf("\n");
}
LinkList MergeLinkList(LinkList L1, LinkList L2)
{
LinkList L3;
InitList(&L3);
Node *p, *q, *r, *s;
p = L1->next;
q = L2->next;
r = L3;
while (p&&q)
{
if (p->data < q->data)
{
s = (Node*)malloc(sizeof(Node));
s->data = p->data;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
}
else
{
s = (Node*)malloc(sizeof(Node));
s->data = q->data;
s->next = NULL;
r->next = s;
r = s;
q = q->next;
}
}
if (p == NULL)
{
r->next = q;
}
if (q == NULL)
{
r->next = p;
}
return L3;
}
int main()
{
LinkList L1,L2,L3;
InitList(&L1); // 指针的地址
InitList(&L2); // 指针的地址
InitList(&L3); // 指针的地址
CreateFromTail(L1);
//PrintList(L1);
CreateFromTail(L2);
//PrintList(L2);
L3 = MergeLinkList(L1, L2);
if (L3->next)
PrintList(L3);
else
printf("NULL\n");
}