描述

给定两个递增的整数集合A和B,分别用链表表示集合A和B,求出A和B的交集,并存放在A中。要求空间复杂度为O(1)。

输入

多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为序列B的m个元素(元素之间用空格分隔)。n=0且m=0时输入结束。

输出

对于每组数据输出一行,为A和B的交集,每个数据之间用空格分隔。

输入样例 1

5 5
1 3 5 7 9
1 2 3 4 5
3 4
1 2 5
2 4 5 6
0 0

输出样例 1

1 3 5
2 5

思路:

借助全局数组num来记录第一个链表里出现的数据,int c来充当计数器。在Insert1函数中,只要输入元素,就令以其为下标的数++,在Insert2函数中,如果输入的元素在数组中对应的数已经是1了,就再令其++,计数器c++(是的,用两个insert函数并不是为了看哪个元素出现了两次,而是为了要这个c的值来控制输出空格的数量,不然就会WA……)

然后输出的时候遍历数组,看谁的值是2就输出那个值,用c来控制输出的空格个数和位置。

不要忘了每次都把数组和c初始化!!!

代码:

#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
int num[100];
int c = 0;
typedef struct LNode
{int data;LNode* next;
}*linklist, LNode;
void Init(linklist& l)
{l = new LNode;l->next = NULL;
}
void Insert1(linklist& l, int n)
{l = new LNode;l->next = NULL;linklist rear = l;for (int i = 0; i < n; i++){linklist p = new LNode;cin >> p->data;num[p->data] = 1;p->next = NULL;rear->next = p;rear = p;}
}
void Show(linklist l)
{linklist p = l;while (p){cout << p->data << " ";p = p->next;}
}
void Insert2(linklist& l, int n)
{l = new LNode;l->next = NULL;linklist rear = l;for (int i = 0; i < n; i++){linklist p = new LNode;cin >> p->data;if (num[p->data] == 1){c++;num[p->data] ++;}p->next = NULL;rear->next = p;rear = p;}
}
void Minus(linklist l)
{linklist p = l->next;int i = 0;while (p){if (num[p->data] == 2){cout << p->data;i++;if (i != c)cout << " ";}p = p->next;}
}
int main()
{linklist l1, l2;Init(l1);Init(l2);int n1, n2;while (cin >> n1 >> n2 && n1 != 0 && n2 != 0){c = 0;for (int i = 0; i < 100; i++)num[i] = 0;Insert1(l1, n1);Insert2(l2, n2);Minus(l1);cout << endl;}return 0;
}

基于链表的两个集合的交集(C++)相关推荐

  1. 基于链表的两个集合的差集

    描述 给定两个递增的整数集合,分别用链表A和B表示,求出A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数.要求空间复杂度为O(1). 输入 ...

  2. python两个集合的交集 合集 差集

    python两个集合的交集 合集 差集 https://blog.csdn.net/qq_17753903/article/details/84899612 python & | and or ...

  3. Python中用于判断两个集合的交集是否为空集isdisjoint()方法

    [小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ​● 标题与摘要 Python中用于判断两个集合的交集是否为空集 isdisjoint ...

  4. 集合:求A、B两个集合的交集、并集和补集的代码(C语言)

    集合:求A.B两个集合的交集.并集和补集的代码(C语言) #include <stdio.h> #define N 100 main(){int a[N],b[N],c[N],d[N];i ...

  5. C++求两个集合的交集

    建立一个类Intersection求两个整数集合的交集,具体要求如下: (1)私有数据成员 int set[20];用数组空间set存储集合 int len:表示该集合中元素的个数 (2)公有成员函数 ...

  6. java集合操作-----求两个集合的交集和并集

    java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例子测试一下:(例子中以java.util.LinkedList为例) 求连 ...

  7. 输入两个由整型数构成的集合(元素个数均为5)分别放到数组A和B中,求这两个集合的交集(交集的元素由两个集合中的相同元素构成),最后输出交集中的元素。

    [问题描述]输入两个由整型数构成的集合(元素个数均为5)分别放到数组A和B中,求这两个集合的交集(交集的元素由两个集合中的相同元素构成),最后输出交集中的元素,要求在主函数中输入A和B数组,并输出交集 ...

  8. C/C++ 求两个集合的交集、并集、差集

    推荐阅读:Python基础自学实用笔记(总和篇)-By Ryan_3610 1.题目:求两个集合的交集.并集.差集 1.1代码 #include <iostream> #include & ...

  9. java 时间段求并集,java集合操作-----求两个集合的交集和并集

    2019独角兽企业重金招聘Python工程师标准>>> java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例 ...

最新文章

  1. java打印星号_【其它】编写Java程序在屏幕上打印用星号组成的等腰三角形
  2. ESP8266编译脚本
  3. Erlang转JAVA,将Erlang UTF-8编码的字符串转换为java.lang.String
  4. 【深度学习】图片分类CNN模板
  5. VS Code编译Python
  6. 敏捷开发任务看板_看板方法的进化论:从丰田精益方法到敏捷研发
  7. 《管理者财务知识一本通》读书笔记一
  8. vsCode自动保存与浏览器自动刷新
  9. matlab代码保密:pcode *.m
  10. 鸿蒙开发工具在哪下载,【鸿蒙开发工具下载】华为鸿蒙开发工具软件下载 v2.1.8 最新版-七喜软件园...
  11. 华为机试练习汇总(JS实现)
  12. HTML5+CSS3小实例:有趣的沙漏加载动画
  13. matlab_格兰杰因果关系检验
  14. Lab 1:结对编程
  15. ios打framework包:Undefined symbols for architecture arm64:
  16. android分区划分,Android分区
  17. 【office】word
  18. fernflower反编译jar包用法
  19. android 百度轻量输入法,百度发布Android手机输入法 打造流畅体验
  20. 爱尔兰圣三一大学计算机硕士课程,都柏林圣三一学院硕士

热门文章

  1. Java基础---内部类详解
  2. MongoDB模糊查询-查询某月的数据
  3. 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)...
  4. linux mailbox模型
  5. 2.12linux csf 防火墙 防止少量的ddos cc攻击
  6. Java的三大特性:封装、继承、多态
  7. ubuntu中文输入法fcitx的安装以及出现方块的解决方法
  8. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
  9. SQL 查询结果为 XML
  10. CentOS 安装中文语言包 教程