已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
。
#include <iostream>
#include <list>
using namespace std;int main()
{list<int> s1;int x = 0;while (1){scanf("%d", &x);if (x == -1){break;}s1.push_back(x);}list<int> s2;while (1){scanf("%d", &x);if (x == -1){break;}s2.push_back(x);}auto cur1 = s1.begin();auto cur2 = s2.begin();list<int> s3;while (cur1 != s1.end() && cur2 != s2.end()){if (*cur1 < *cur2){cur1++;}else if (*cur1 > *cur2){cur2++;}else{s3.push_back(*cur1);cur1++;cur2++;}}if (s3.empty()){cout << "NULL";}/*for (const auto &e : s3)这种方式不可取,会导致最后多出一个空格{cout << e << ' ';}*/auto cur = s3.begin();for (int i = 0; i < s3.size(); i++){if (i == s3.size() - 1){cout << *cur;break;}cout << *cur << ' ';cur++;}return 0;
}