题目描述
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
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;
struct Node{ //结点
int data;
Node *next;
};
class List{
public:
Node *head;
List(){
head = new Node;
head->next = NULL;
}
void create(){
int n;
cin >> n;
Node *tail = head;
for(int i = 0; i < n; i++){
Node *s = new Node;
cin >> s->data;
tail->next = s;
s->next = NULL;
tail = s;
}
}
int LL_merge(List *La, List *Lb){ //Lc调用此函数得到合并后的单链表
head = La->head; //以La的头结点作为Lc的头结点
Node *c = head;
Node *p = La->head->next; //p指向La
Node *q = Lb->head->next; //q指向Lb
while(p && q){ //当La、Lb指向的结点都存在时,即两表都还未遍历完时
if(p->data <= q->data){
c->next = p;
c = p;
p = p->next;
}else{
c->next = q;
c = q;
q = q->next;
}
}
//若其中一表已经合并完,将剩余一表全部增添到Lc中
while(p){
c->next = p;
c = p;
p = p->next;
}
while(q){
c->next = q;
c = q;
q = q->next;
}
display();
}
void display(){
Node *p = head->next;
while(p){
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
};
int main()
{
List La,Lb,Lc;
La.create();
Lb.create();
Lc.LL_merge(&La, &Lb);
return 0;
}