已知两个非降序链表序列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>
#include<string>
#include<stdlib.h>
using namespace std;
#define N 1000006//太小会引起段错误
int a[N], b[N], c[N];
int main()
{
cin >> a[0];
int i = 0;
while (a[i] != -1)
{
cin >> a[++i];
}
cin >> b[0];
int j = 0;
while (b[j] != -1)
{
cin >> b[++j];
}
if (a[0] == -1 && b[0] == -1)cout << "NULL";
int e = 0;
int k=0, l=0;
int num = 0;
while( k < i && l < j)
{
if (a[k] <= b[l]) { c[e++] = a[k++]; num++; }
else { c[e++] = b[l++]; num++; }
}
while (l <j) { c[e++] = b[l++]; num++; }
while (k <i) {
c[e++] = a[k++];
num++;
}
for (int e = 0; e < num; e++)
{if(e<num-1)
cout << c[e] << " ";
else cout<<c[e]; }
}
这题我主要是要记录一下我报错的点,pta有个测试点一直过不了,后来发现是数组开的不够大