链表Set_LinkList(并集)

并集是把两个集合合并,去除重复元素后组成的集合。

通过键盘输入将两个集合保存在链表A和链表B中,再创建一个链表C用于保存集合A、B的并集,将链表C打印输出。

提示:

1.相对于上一题(链表Set_LinkList(建立)),本题只需遍历已保存的链表A、B,将遍历到的当前值插入到链表C中;

2.为遍历取出链表数据,需要编写取值函数GetElem(LinkList L, int i),该函数功能为按序号返回数据元素,注意序号从1开始;

3.遍历链表需要知道链表长度,请自行编写ListLength()函数。

4.用户从键盘输入集合A、B,输入数据为整数,输入以-1结束。

输入格式:

第一行输入集合A,第二行输入集合B。

输出格式:

输出集合A、B的并集C

输入样例:

在这里给出一组输入。例如:

复制代码
9 4 0 7 3 6 5 -1
1 5 6 8 4 7 0 -1

输出样例:

在这里给出相应的输出。例如:

复制代码
9 4 0 7 3 6 5 1 8

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
typedef int ElemType;
struct node{
    ElemType Data;
    struct node* next;
};
typedef struct node* Set_LinkList;
Set_LinkList init(){
    Set_LinkList L = (Set_LinkList)malloc(sizeof(struct node));
    L->Data = -1;
    L->next = NULL;
    return L;
}
int ListLength(Set_LinkList L){
    int counts = 0;
    Set_LinkList p = L->next;
    while(p != NULL){
        counts++;
        p = p->next;
    }
    return counts;
}
ElemType GetElem(Set_LinkList L, int i){
    int counts = 0;
    Set_LinkList p = L->next;
    while(p != NULL){
        counts++;
        if(counts == i){
            return p->Data;
        }
        p = p->next;
    }
    return -1;
}
void CreatList(Set_LinkList L, ElemType x){
    Set_LinkList p = L->next;
    if(p == NULL){
        Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
        newnode->Data = x;
        newnode->next = NULL;
        L->next = newnode;
        return;
    }
    while(p->next != NULL){
        p = p->next;
    }
    Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
    newnode->Data = x;
    newnode->next = NULL;
    p->next = newnode;
    return;
}
void display(Set_LinkList L){
    Set_LinkList p = L->next;
    if(p == NULL){
        cout<<"NULL";
        return;
    }
    while(p->next != NULL){
        cout<<p->Data<<' ';
        p = p->next;
    }
    cout<<p->Data;
}
void insert(Set_LinkList L, ElemType e){
    Set_LinkList p = L->next;
    if(p == NULL){
        Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
        L->next = newnode;
        newnode->Data = e;
        newnode->next = NULL;
        return;
    }
    while(p->next != NULL){
        if(p->Data == e){
            return;
        }
        p = p->next;
    }
    if(p->Data == e){
        return;
    }
    Set_LinkList newnode = (Set_LinkList)malloc(sizeof(struct node));
    p->next = newnode;
    newnode->Data = e;
    newnode->next = NULL;
    return;
}
int main(){
    int x;
    Set_LinkList A = init();
    Set_LinkList B = init();
    cin>>x;
    while(x != -1){
        CreatList(A , x);
        cin>>x;
    }
    cin>>x;
    while(x != -1){
        CreatList(B , x);
        cin>>x;
    }
    int longA = ListLength(A);
    int longB = ListLength(B);
    Set_LinkList C = init();
    for(int i = 1;i <= longA;i++){
        insert(C,GetElem(A,i));
    }
    for(int i = 1;i <= longB;i++){
        insert(C,GetElem(B,i));
    }
    display(C);
    return 0;
}
相关推荐
程序员Xu36 分钟前
【LeetCode热题100道笔记】二叉树的右视图
笔记·算法·leetcode
笑脸惹桃花1 小时前
50系显卡训练深度学习YOLO等算法报错的解决方法
深度学习·算法·yolo·torch·cuda
阿维的博客日记1 小时前
LeetCode 48 - 旋转图像算法详解(全网最优雅的Java算法
算法·leetcode
GEO_YScsn2 小时前
Rust 的生命周期与借用检查:安全性深度保障的基石
网络·算法
程序员Xu2 小时前
【LeetCode热题100道笔记】二叉搜索树中第 K 小的元素
笔记·算法·leetcode
THMAIL3 小时前
机器学习从入门到精通 - 数据预处理实战秘籍:清洗、转换与特征工程入门
人工智能·python·算法·机器学习·数据挖掘·逻辑回归
Kevinhbr3 小时前
CSP-J/S IS COMING
数据结构·c++·算法
蕓晨3 小时前
set的插入和pair的用法
c++·算法
THMAIL4 小时前
深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
金古圣人4 小时前
hot100 滑动窗口
数据结构·c++·算法·leetcode·哈希算法