Problem Description
已知顺序表A与B是两个有序的顺序表,其中存放的数据元素皆为普通整型,将A与B表归并为C表,要求C表包含了A、B表里所有元素,并且C表仍然保持有序。
Input
输入分为三行:
第一行输入m、n(1<=m,n<=10000)的值,即为表A、B的元素个数;
第二行输入m个有序的整数,即为表A的每一个元素;
第三行输入n个有序的整数,即为表B的每一个元素;
Output
输出为一行,即将表A、B合并为表C后,依次输出表C所存放的元素。
Example Input
5 3
1 3 5 6 9
2 4 10
Example Output
1 2 3 4 5 6 9 10
#include<iostream>
using namespace std;
//建立线性表的结构
typedef struct LNode{
int number;
struct LNode *next;
}LNode,*LinkList;
//依次存储放入元素
void CreateLink(LinkList &L,int len){
L = new LNode;
LinkList p = L;
p->next = NULL;
while(len--){
LinkList s = new LNode;
cin>>s->number;
s->next = p->next;
p->next = s;
p = s;
}
}
//合并
void S(LinkList L1,LinkList &L2){
LinkList p = L1->next,q = L2->next;
int k1 = 1,k2 = 1;
while(p){
while(q){
if(p->number<q->number){
cout<<p->number<<" ";
p = p->next;
if(!p){
k1 = 0;
break;
}
}
else if(p->number>q->number){
cout<<q->number<<" ";
q = q->next;
if(!q){
k2 = 0;
break;
}
}
else{
cout<<p->number<<" "<<q->number<<" ";
p = p->next;
q = q->next;
}
}
if(!k2||!k1)
break;
}
if(!k1)
while(q){
cout<<q->number<<" ";
q = q->next;
}
if(!k2)
while(p){
cout<<p->number<<" ";
p = p->next;
}
}
int main(){
LinkList L1,L2;
int m,n;
cin>>m>>n;
CreateLink(L1,m);
CreateLink(L2,n);
S(L1,L2);
return 0;
}