PTA 水題 兩個有序連結串列序列的合併
阿新 • • 發佈:2019-01-05
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
水題
注意資料規模,以及兩個空的時候輸出NULL
#include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <vector> #include <sstream> #include <map> #include <queue> #include <stack> #include <cstring> #include <set> #include <cmath> #define INF 1000000 using namespace std; int a[1000005]; int b[1000005]; int ans[2000005]; int lena; int lenb; int main() { int i=0; int x=0; while(1) { scanf("%d",&x); if(x==-1) break; a[i++]=x; } lena=i; i=0; while(1) { scanf("%d",&x); if(x==-1) break; b[i++]=x; } lenb=i; int j=0; i=0; int k=0; if(lena==0 && lenb==0) { printf("NULL\n"); return 0; } while(i<lena && j<lenb) { if(a[i]<b[j]) { ans[k++]=a[i++]; } else { ans[k++]=b[j++]; } } while(i<lena) { ans[k++]=a[i++]; } while(j<lenb) { ans[k++]=b[j++]; } for(int i=0;i<k;i++) { if(i==0) printf("%d",ans[i]); else printf(" %d",ans[i]); } printf("\n"); return 0; }