1. 程式人生 > >5-51 兩個有序連結串列序列的合併(20分)

5-51 兩個有序連結串列序列的合併(20分)

已知兩個非降序連結串列序列S1與S2,設計函式構造出S1與S2的並集新非降序連結串列S3。

輸入格式:

輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用-11表示序列的結尾(-11不屬於這個序列)。數字用空格間隔。

輸出格式:

在一行中輸出合併後新的非降序連結串列,數字間用空格分開,結尾不能有多餘空格;若新連結串列為空,輸出NULL

輸入樣例:

1 3 5 -1
2 4 6 8 10 -1

輸出樣例:

1 2 3 4 5 6 8 10

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<int> v1,v2;
	vector<int> :: iterator p1,p2;
	int x;
	int flag=0;
	while(1){       //讀入v1 
		cin>>x;
		if(x!=-1)
		v1.push_back(x);
		else
		break;
	}
	while(1){       //讀入v2 
		cin>>x;
		if(x!=-1)
		v2.push_back(x);
		else
		break; 
	}
	for(p1=v1.begin(),p2=v2.begin();p1!=v1.end()&&p2!=v2.end();){
		if(*p1<*p2){
		cout<<*p1<<" ";
		p1++;}
		else {
		cout<<*p2<<" "; 
		p2++;}
	}
	while(p1!=v1.end()){
		if(flag)cout<<" ";
		else flag=1;
		cout<<*p1;
		p1++;
	}
	while(p2!=v2.end()){
		if(flag)cout<<" ";
		else flag=1;
		cout<<*p2;
		p2++;
	}
	if(v1.size()==0&&v2.size()==0)   //判斷是否為空 
	cout<<"NULL";
	cout<<endl;
	return 0;
}