04:非递减有序集合合并
总时间限制:
3000ms
内存限制:
500000kB
描述
巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。
输入
三行,第一行A,B集合的个数n,m
第二行:集合A的数据;
第三行:集合B的数据。
输出
二行,第一行,集合C的个数k
第二行:集合C的数据。
样例输入
11 12 2 4 6 7 8 9 12 34 56 78 89 3 5 7 9 12 34 56 98 234 456 789 1234
样例输出
18 2 3 4 5 6 7 8 9 12 34 56 78 89 98 234 456 789 1234
提示
n,m<255
#include <iostream>
using namespace std;
template <typename T>
struct Node
{
T data;
Node<T> *next;
};
template <typename T>
class List
{
private:
Node<T> *first = new Node<T>;
public:
List() {}
List(int i)
{
first->next = nullptr;
int n = i;
Node<T> *r, *s;
first = new Node<T>;
r = first;
for (int i = 0; i < n; i++)
{
s = new Node<T>;
cin >> s->data;
r->next = s;
r = s;
}
r->next = nullptr;
}
void dispaly()
{
Node<int> *p = new Node<int>;
p = first->next;
while (p)
{
cout << p->data << " ";
p = p->next;
}
}
int mergeList(List *l1, List *l2, List *l3)
{
int i = 0;
Node<T> *p, *q, *r;
r = l3->first;
p = l1->first->next;
q = l2->first->next;
while (p && q)
{
// Node<T>*aa=new Node<T>:
if (p->data < q->data)
{
r->next = p;
r = p;
p = p->next;
i++;
}
else if (p->data > q->data)
{
r->next = q;
r = q;
q = q->next;
i++;
}
else
{
r->next = p;
r = p;
p = p->next;
q = q->next;
i++;
}
}
while (p)
{
r->next = p;
r = p;
p = p->next;
i++;
}
while (q)
{
r->next = q;
r = q;
q = q->next;
i++;
}
r->next = nullptr;
return i;
}
};
int main()
{
int sum;
int n, m;
cin >> n >> m;
List<int> *l1 = new List<int>(n);
List<int> *l2 = new List<int>(m);
List<int> *l3 = new List<int>;
// cout << "111" << endl;
sum = l3->mergeList(l1, l2, l3);
cout << sum << endl;
l3->dispaly();
// cout << sum << endl;
return 0;
}