//库函数头文件包含
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//函数状态码定义
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType; //假设线性表中的元素均为整型
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
Status ListCreate_L(LinkList &L)
{
L = (LNode *)malloc(sizeof(LNode));
if (!L)
{
exit(OVERFLOW);
}
L = (LNode *)malloc(sizeof(LNode));
LNode *tmp = L;
int n = 0, num = 0;
while (scanf("%d", &num) != EOF)
{
if (num == -1)
{
break;
}
tmp->next = (LNode *)malloc(sizeof(LNode));
tmp->next->data = num;
tmp = tmp->next;
n++;
}
tmp->next = NULL;
L->data = n;
return OK;
}
void ListPrint_L(LinkList &L)
{
if (L->next==NULL) {
printf("NULL");
return ;
}
//输出单链表
LNode *p = L->next; // p指向第一个元素结点
while (p != NULL)
{
if (p->next != NULL)
printf("%d ", p->data);
else
printf("%d", p->data);
p = p->next;
}
}
LNode *LinkOrderList(LinkList &L1, LinkList &L2)
{
//确定头部最小的序列
if (!(L1->next)) {
return L2;
}
if (!(L2->next)) {
return L1;
}
LinkList p = L1->next, t = L2->next;
if ((L1->next->data) > (L2->next->data))
{
p = L2->next, t = L1->next;
}
while (p->next != NULL && t != NULL)
{
if ((p->next->data) > (t->data))
{
LinkList s = p->next;
p->next = t;
t = s;
}
else
{
p = p->next;
}
}
p->next = t;
return L1;
}
int main()
{
LinkList L1, L2;
if (ListCreate_L(L1) != OK)
{
printf("表创建失败!!!\n");
return -1;
}
if (ListCreate_L(L2) != OK)
{
printf("表创建失败!!!\n");
return -1;
}
LNode *head = LinkOrderList(L1, L2);
ListPrint_L(head);
return 0;
}