#include<bits/stdc++.h>
using namespace std;
//结点
typedef struct Lnode {
int data;
struct Lnode *next;
}Lnode, *Linklist;
//尾插
void Creatlist(Linklist &L, int &e) {
Lnode *p = new Lnode;
p->data = e;
p->next = NULL; //处理新加入节点
Lnode *cur = L;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = p;
p->next = NULL;
}
//初始化
void Initlist(Linklist &L) {
L = new Lnode;
L->next = NULL;
}
//求交集
void All(Linklist &L1, Linklist &L2, queue <int> &myqueue) {
Lnode *c1 = L1->next;
Lnode *c2 = L2->next;
while (c1&&c2)//A和B都不空时
{
if (c1->data == c2->data) {
myqueue.push(c1->data);
c1 = c1->next;
c2 = c2->next;
}
else if (c1->data > c2->data) {
c2 = c2->next;
}
else {
c1 = c1->next;
}
}
while (c1==NULL||c2==NULL) //A/B有未遍历元素
{
break;
}
}
int main() {
int n, m;
while (scanf("%d %d",&n,&m)!=EOF) {
if (n == 0 && m == 0) break;
Linklist L1; //表A
Initlist(L1);
Linklist L2; //表B
Initlist(L2);
for (int i = 0; i < n; i++) { //建A
int e;
cin >> e;
Creatlist(L1, e);
}
for (int i = 0; i < m; i++) { //建A
int e;
cin >> e;
Creatlist(L2, e);
}
//用队列存储交集的'元素'
queue <int> myqueue;
All(L1, L2, myqueue);
while (!myqueue.empty()) //输出交集
{
if(myqueue.size()>1){
cout << myqueue.front()<<" ";
myqueue.pop();
}
else
{
cout << myqueue.front() << endl;
myqueue.pop();
}
}
}
}
BJFU 227基于链表的两个集合的交集[用队列存储的结果]
最新推荐文章于 2024-07-24 20:44:05 发布