#include<iostream>
using namespace std;
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode,*LinkList;
void InitList(LinkList &L)
{
L=new LNode;//或L=(LinkList)malloc(sizeod(LNode));
L->next=NULL;
}
void CreateList(LinkList &L,int n)//尾插法
{
int i;
LinkList p,r;
r=L;
for(i=1;i<=n;i++)
{
p=new LNode;
cin>>p->data;//scanf(&p->data);
p->next=NULL;
r->next=p;
r=p;
}
}
void MergeList(LinkList L1,LinkList L2,LinkList &L3)
{
LinkList a,b,c,s;
a=L1->next;b=L2->next;c=L3;
while(a&&b)
{
if(a->data<b->data)
{
s=new LNode;//新建结点s
s->data=a->data;
c->next=s;//接在L3尾指针后
c=s;
a=a->next;
}
else
{
s=new LNode;//新建结点s
s->data=b->data;
c->next=s;//接在L3尾指针后
c=s;
b=b->next;
}
}
if(a)c->next=a;
if(b)c->next=b;
}
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
}
int main()
{
int m,n;
LinkList L1,L2,L3;
InitList(L1);
InitList(L2);
InitList(L3);
cout<<"第一个有序表有几个元素:";
cin>>m;
cout<<"请依次输入第一个有序表元素:";
CreateList(L1,m);
cout<<"第二个有序表有几个元素:";
cin>>n;
cout<<"请依次输入第二个有序表元素:";
CreateList(L2,n);
MergeList(L1,L2,L3);
cout<<"合并后的有序表:";
PrintList(L3);
}
运行结果: