R7-5 两个有序链表序列的交集

Author Avatar
小包
发表:2024-11-03 04:22:49
修改:2024-11-03 04:22:49

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

评论