题目描述
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
int LL_merge(ListNode *La, ListNode *Lb)
输入
第1行先输入n表示有n个数据,接着输入n个数据
第2行先输入m表示有M个数据,接着输入m个数据
输出
输出合并后的单链表数据,数据之间用空格隔开
输入样例1
3 11 33 55
4 22 44 66 88
输出样例1
11 22 33 44 55 66 88
#include <iostream>
using namespace std;
class LNode
{
public:
int data;
LNode* next;
LNode()
{
next = nullptr;
}
};
class LinkList
{
public:
LNode* head;
int len;
LinkList()
{
head = new LNode;
len = 0;
}
void Create()
{
int t;
cin >> t;
LNode* tail = head;
while (t--)
{
int e;
cin >> e;
LNode* p = new LNode;
p->data = e;
tail->next = p;
tail = p;
len++;
}
}
};
LNode* LL_merge(LNode* la, LNode* lb)
{
LNode* res = new LNode;
LNode* t = res;
LNode* p = la;
LNode* q = lb;
while (p && q)
{
if (p->data < q->data)
{
t->next = p;
p = p->next;
t = t->next;
}
else
{
t->next = q;
q = q->next;
t = t->next;
}
}
if (p == nullptr)
{
t->next = q;
}
else
{
t->next = p;
}
return res;
}
int main()
{
LinkList la, lb;
la.Create();
lb.Create();
LNode* p = LL_merge(la.head->next, lb.head->next)->next;
while (p != nullptr)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
return 0;
}