目录
题目要求:
本题要求实现一个函数,求两个集合A、B的并集,A和B使用单链表进行存储,求得的结果放在A表中。(注意集合中没有重复数据,B表中在A表中没有的元素放在A表的后面。)
函数接口定义:
void Union_L(LinkList &A,LinkList B)
解释接口参数:其中A
、B
是用户传入的参数。A
、B
都 是指向单链表头结点的指针,单链表结点有两个成员,一个是data域,存放该结点的数据元素,不特别说明的话元素类型为整型,一个是next域 ,指向下一个结点;函数无返回值,结果在A
中表现出来。
裁判测试程序样例:
#include<iostream>
using namespace std;
typedef int Status;
typedef int ElemType;
typedef struct node {
ElemType data;
struct node *next;
}LNode,*LinkList;
Status InitList_Lk(LinkList &L) ; // 单链表的初始化,已实现,不用再定义
void CreatList(LinkList &L,int n); //创建含有n个元素的单链表,已实现,不用再定义
void ViewList(LinkList L) ;//打印单链表,已实现,不用再定义
void Union_L(LinkList &A,LinkList B);// 要实现的函数
int main()
{
LinkList A,B;
int n,m;
InitList_Lk(A);
cin >> n;
CreatList(A, n);
InitList_Lk(B);
cin >> m;
CreatList(B, m);
Union_L(A,B);
ViewList(A);
return 0;
}
输入样例:
在这里给出一组输入。例如:
10
12 78 3 145 6 34 2 9 23 7
8
11 9 44 76 12 90 7 57
输出样例:
在这里给出相应的输出。例如:
12 78 3 145 6 34 2 9 23 7 11 44 76 90 57
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
学习时间:
2022/10/9
- 星期日早上9:00
- 其实就是先合并,在去重
随便写写的答案:
void Union_L(LinkList &A,LinkList B)
{
LinkList temp = B;
LinkList p = A,q;
while(p->next)
p=p->next;
while(temp->next)
{
temp = temp->next;
p->next = temp;
p=p->next;
}
p = A;
while(p->next != NULL)
{
q = p;
q=q->next;
p=p->next;
while(q->next != NULL)
{
if(p->data != q->next->data)
q=q->next;
else
q->next=q->next->next;
}
}
}