链表合成,表合成类题目
给定两个元素有序(从小到大)的链表,要求将两个链表合并成一个有序(从小到大)链表。
输入格式
第一行输入第一个链表的结点数 S1。
第二行输入 S1 个整数,两两之间用空格隔开。
第三行输入第二个链表的结点数 S2。
第四行输入 S2个整数,两两之间用空格隔开。
输出格式
输出合并之后的链表结果,两两之间用空格隔开。
数据范围
1≤S1,S2≤100
输入样例:
4
2 4 6 8
3
3 5 7
输出样例:
2 3 4 5 6 7 8
贴代码(AC):
#include<iostream>
#include<vector>
#include<list>
using namespace std;
int main(){
int N1,N2;
cin>>N1;
vector<int> s1;
for(int i = 0;i < N1;i++){
int n;
cin>>n;
s1.push_back(n);
}
cin>>N2;
vector<int> s2;
for(int i = 0;i < N2;i++){
int n;
cin>>n;
s2.push_back(n);
}
vector<int>::iterator it = s1.begin();
vector<int>::iterator it2 = s2.begin();
while(it2!=s2.end() && it != s1.end()){
if(*it2<=*it){
cout<<*it2<<' ';
it2++;
}
else{
cout<<*it<<' ';
it++;
}
}
if(it2 == s2.end()){
while(it!=s1.end()){
cout<<*it<<' ';
it++;
}
}
else if(it == s1.end()){
while(it2 != s2.end()){
cout<<*it2<<' ';
it2++;
}
}
}
注意这里
while(it2!=s2.end() && it != s1.end()){
if(*it2<=*it){
cout<<*it2<<' ';
it2++;
}
else{
cout<<*it<<' ';
it++;
}
}
需要注意的是对两个链表的处理逻辑,这里思考可不可以写两个while循环,肯定在时间复杂度上会差,但是逻辑上可不可以实现同样的解决?