#include<iostream.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define OK 1
#define OVERFLOW -2
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
Status InitList_L(LinkList &L)
{
//构造一个空的链表
L=new LNode;
if(!L)
exit(OVERFLOW);
L->next=NULL;
return OK;
}//InitList_L
void CreateList_L(LinkList &L,int n)
{
//正序输入n个数据元素,建立带头结点的单链表
LNode *p;
LinkList S;
L=new LNode;
L->next=NULL;
S=L; //建立带头结点/尾指针的单链表
for(int i=1;i<=n;++i)
{
p=new LNode;
cin>>p->data; //输入元素值
p->next=S->next;
S->next=p;
S=p; //插入
}
}//CreateList_L
void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{
//归并La,Lb得到单链表Lc,Lc的元素非递减排列
LNode *pa,*pb,*pc;
pa=La->next;
pb=Lb->next; //p指向第一个结点
Lc=pc=La;
while(pa && pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
pc->next=pa?pa:pb;
}
}//MergeList_L
void visit_L(LinkList L)
{
LNode *p=L->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void main()
{
LinkList La,Lb,Lc;
int n;
InitList_L(La);
cout<<"input La n=";
cin>>n;
CreateList_L(La,n);
visit_L(La);
cout<<endl;
InitList_L(Lb);
cout<<"input Lb n=";
cin>>n;
CreateList_L(Lb,n);
visit_L(Lb);
cout<<endl;
MergeList_L(La,Lb,Lc);
visit_L(Lc);
}