R7-5 两个有序链表序列的交集
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
。
输入样例:
1 2 5 -1
2 4 5 8 10 -1
输出样例:
2 5
#include <iostream>
#include <vector>
using namespace std;
// 函数用于读取输入序列并返回一个vector
vector<int> readSequence() {
vector<int> sequence;
int num;
while (cin >> num && num != -1) {
sequence.push_back(num);
}
return sequence;
}
// 函数用于计算两个有序序列的交集
vector<int> intersection(const vector<int>& s1, const vector<int>& s2) {
vector<int> result;
size_t i = 0, j = 0;
while (i < s1.size() && j < s2.size()) {
if (s1[i] < s2[j]) {
++i;
} else if (s1[i] > s2[j]) {
++j;
} else {
// 如果相等,加入交集结果并移动两个指针
result.push_back(s1[i]);
++i;
++j;
}
}
return result;
}
int main() {
vector<int> s1 = readSequence();
vector<int> s2 = readSequence();
vector<int> s3 = intersection(s1, s2);
if (s3.empty()) {
cout << "NULL" << endl;
} else {
for (size_t i = 0; i < s3.size(); ++i) {
if (i > 0) cout << " ";
cout << s3[i];
}
cout << endl;
}
return 0;
}