7-2 两个有序链表序列的合并(c++)

7-2 两个有序链表序列的合并

已知两个非降序链表序列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 
using namespace std;

list<int> add(){
	list<int> l;
	int a;	
	while(1){
		cin>>a;
		if(a==-1) break;
		l.push_back(a);
	}
	return l;
}
void put(list<int> s,list<int> &s3){
	while(!s.empty()){
		s3.push_back(s.front());
		s.pop_front();
	}
}
int main() {
	list<int> s1 = add(),s2 = add(),s3;
	while(!s1.empty()&&!s2.empty()){
		if(s1.front()>s2.front()){
			s3.push_back(s2.front());
			s2.pop_front();
		}else{
			s3.push_back(s1.front());
			s1.pop_front();
		}
	}
	/*while(!s1.empty()){
		s3.push_back(s1.front());
		s1.pop_front();
	}
	while(!s2.empty()){
		s3.push_back(s2.front());
		s2.pop_front();
	}*/
	put(s1,s3);
	put(s2,s3);
	if(!s3.empty()){
		cout<<s3.front();
		s3.pop_front();
		while(!s3.empty()){
			cout<<" "<<s3.front();
			s3.pop_front();
		}
	}else cout<<"NULL";
}

你可能感兴趣的:(刷题,链表,c++)