【单链表】集合合并

描述

已知集合A与集合B,且第个集合内数据是唯一的。求A,B集合合并成新的集合C,要求C集合内的数据也是唯一的。并指出C集合的个数。

输入三行,第一行分别为集合A,B的个数
第二行为A集合的数据
第三行为B集合的数据输出两行
第一行集合C的个数
第二行为C集合的数据样例输入

4 5
12 34 56 78
34 67 89 34 76

样例输出

7
12 34 56 78 67 89 76

 

#include<iostream>
using namespace std;
template<class T>
struct Node
{
  T data;
  Node<T> *next;
};
template<class T>
class LinkList
{
public:
  LinkList();
  ~LinkList();
  bool Locate(T x);
  void Insert(T a[], int n);
  void PrintList();
  Node<T> *first;
};
template <class T>
void LinkList<T>::Insert(T a[], int n)
{
  Node<T> *s, *r;
  first = new Node<T>;
  //first=NULL;
  r = first;
  for (int i = 0; i < n; i++)
  {
    s = new Node<T>;
    s->data = a[i];
    r->next = s;
    r = s;
  }
  r->next = NULL;

}
template <class T>
LinkList<T>::LinkList()
{
  first = new Node<T>;
  first->next = NULL;
}
template <class T>
LinkList<T>::~LinkList()
{
  Node<T> *p;
  while (first->next)
  {
    p = first->next;
    delete first;
    first = p;
  }
  delete first;
}
template<class T>
void LinkList<T>::PrintList()
{
  Node<T> *p;
  p = first->next;
  while (p)
  {
    cout << p->data << " ";
    p = p->next;
  }
  cout << endl;
}
template <class T>
bool  LinkList<T>::Locate(T x) {

  Node<T> *p;
  p = first->next;
  while (p != NULL)
  {
    if (p->data == x)
      return true;
    p = p->next;
  }
  return false;
}

int main()
{
  LinkList<int> list1;
  LinkList<int> list2;
  int k1, k2;
  bool work;
  cin >> k1 >> k2;
  int count = k1;
  int a[1000];
  int b[1000];
  int c[2000];
  for (int i = 0; i < k1; i++)
  {
    cin >> a[i];
    c[i] = a[i];
  }
  list1.Insert(a, k1);
  for (int i = 0; i < k2; i++)
  {
    cin >> b[i];
    if (list1.Locate(b[i]) == false)
    {
      c[count++] = b[i];
    }
  }
  list2.Insert(c, count);
  cout << count << endl;
  list2.PrintList();
  return 0;
}

 

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注

19 − 3 =