7-51 两个有序链表序列的合并 (20 分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
。
输入样例:
1 3 5 -1
2 4 6 8 10 -1
输出样例:
1 2 3 4 5 6 8 10
利用归并排序的思想,注意数组的大小要足够大不然最后一个点可能过不了。
#include<iostream>
using namespace std;
#define MAXN 1000010
int a[MAXN];
int b[MAXN];
int c[MAXN];
int main()
{
int i=0,j=0;
int num;
while(cin>>num&&num!=-1)
{
a[i++] = num;
}
while(cin>>num&&num!=-1)
{
b[j++] = num;
}
int lenA = i;
int lenB = j;
i = 0,j = 0;
int k = 0;
while(i<lenA&&j<lenB)
{
if(a[i]<b[j])
{
c[k] = a[i];
i++;
k++;
}
else
{
c[k] = b[j];
k++;
j++;
}
}
while(i<lenA)
{
c[k] = a[i];
i++;
k++;
}
while(j<lenB)
{
c[k] = b[j];
k++;
j++;
}
if(lenA+lenB==0)
cout<<"NULL"<<endl;
for(int i = 0;i<lenA+lenB;i++)
{
if(i!=0)
cout<<" ";
cout<<c[i];
}
return 0;
}