题目描述
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
int LL_merge(ListNode *La, ListNode *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;
#define ok 0
class ListNode {
public:
int data;
ListNode *next;
ListNode() {
next = NULL;
}
};
class LinkList {
public:
ListNode *head;
int len;
LinkList() {
head = new ListNode;
len = 0;
}
~LinkList() {
ListNode *p,*q;
p=head;
while(p != NULL) {
q = p;
p = p->next;
delete q;
}
len = 0;
head = NULL;
}
ListNode createList(int n) {
int i, length, data;
len = n;
ListNode* pnew = NULL;
ListNode* tail = NULL;
head->data = 0;
head->next = NULL;
tail = head;
for (i = 1; i < len + 1; i++) {
pnew = new ListNode();
cin >> pnew->data;
pnew->next = NULL;
tail->next = pnew;
tail = pnew;
}
return *head;
}
void LL_display() {
ListNode *p;
p = head->next;
while(p) {
cout<< p->data <<' ';
p = p->next;
}
cout<<endl;
}
int LL_merge(LinkList *La) {
LinkList *temp;
ListNode *a = La->head->next;
ListNode *b = head->next;
ListNode *c = temp->head->next;
while(a && b) { // 当其中一个链表为空退出循环
if(a->data < b->data) { //对比两个链表的数据,按大小顺序排列
c->next = a->next;
c = c->next;
a = a->next;
} else {
c->next = b->next;
c = c->next;
b = b->next;
}
}
while(a) { //a不为空则直接把所有a结点放在新链表后面
c->next = a->next;
c = c->next;
a = a->next;
}
while(b) { //b不为空则直接把所有a结点放在新链表后面
c->next = b->next;
c = c->next;
b = b->next;
}
temp->LL_display();
}
};
int main() {
int n,data,index1,index2;
LinkList a;
LinkList b;
cin>>n;
a.createList(n);
cin>>n;
b.createList(n);
a.LL_merge(b);
}