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