题目描述
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
int LL_merge(LinkList& La, LinkList& Lb)
输入
第1行先输入n表示有n个数据,接着输入n个数据
第2行先输入m表示有M个数据,接着输入m个数据
输出
输出合并后的单链表数据,数据之间用空格隔开
输入样例
3 11 33 55
4 22 44 66 88
输出样例
11 22 33 44 55 66 88
代码
#include <iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next = nullptr;
} LNode, *Linklist;
void InitList(Linklist &L) {
L = new LNode;
L->next = NULL;
}
void CreateList(Linklist &L, int n) {
int x;
LNode *p, *r = L;
for (int i = 0; i < n; i++) {
p = new LNode;
cin >> x;
p->data = x;
r->next = p;
r = p;
}
r->next = NULL;
}
void Display(Linklist &L) {
LNode *p = L->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
delete p;
cout << endl;
}
void LL_merge(Linklist La, Linklist Lb, Linklist &Lc) {
LNode *a = La->next;
LNode *b = Lb->next;
LNode *c = Lc;
while (a && b) {
if (a->data <= b->data) {
c->next = a;
c = c->next;
a = a->next;
} else {
c->next = b;
c = c->next;
b = b->next;
}
}
while (a) {
c->next = a;
c = c->next;
a = a->next;
}
while (b) {
c->next = b;
c = c->next;
b = b->next;
}
}
int main() {
int n, m;
Linklist La, Lb, Lc;
InitList(La);
cin >> n;
CreateList(La, n);
InitList(Lb);
cin >> m;
CreateList(Lb, m);
InitList(Lc);
LL_merge(La, Lb, Lc);
Display(Lc);
return 0;
}