您的位置:首页 > 理论基础 > 数据结构算法

PAT《数据结构学习与实验指导》实验项目集 2-12

2015-08-15 11:46 435 查看
时间限制

400 ms

内存限制

64000 kB

代码长度限制

8000 B

判题程序

Standard

已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。

输入格式说明:

输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列的结尾(-1不属于这个序列)。数字用空格间隔。

输出格式说明:

在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出“NULL”。

样例输入与输出:
序号输入输出
1
1 2 5 -1
2 4 5 8 10 -1

2 5

2
1 3 5 -1
2 4 6 8 10 -1

NULL

3
1 2 3 4 5 -1
1 2 3 4 5 -1

1 2 3 4 5

4
3 5 7 -1
2 3 4 5 6 7 8 -1

3 5 7

5
-1
10 100 1000 -1

NULL

用两个迭代器去遍历两个列表,当迭代器指向的数据较小时,通过移动迭代器使值向大的靠近。

#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int> list1;
list<int> list2;
list<int> result;
int n;
int count = 0;
while(cin>>n && n != -1){
list1.push_back(n);
}
while(cin>>n && n!= -1){
list2.push_back(n);
}
if(list1.size() ==0 || list2.size() == 0){
cout<<"NULL"<<endl;
}else{
list<int>::iterator iter1 = list1.begin();
list<int>::iterator iter2 = list2.begin();
while(iter1 != list1.end() && iter2 != list2.end()){
if(*iter1 == *iter2){
if(count == 0){
cout<<*iter1;
}else{
cout<<" "<<*iter1;
}
iter1++;
iter2++;
count++;
}else if(*iter1 < *iter2){
iter1++;
}else{
iter2++;
}
}
if(count == 0){
cout<<"NULL"<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: