题目描述
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
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 \n
#include <iostream>
using namespace std;
class LinkNode{
public:
int data;
LinkNode *next;
LinkNode(){ next=NULL;}
friend class LinkList;
};
class LinkList{
public:
LinkNode *head;
int len;
LinkList();
~LinkList();
LinkNode *LL_index(int i);
void LL_create();
void LL_display();
void merge(LinkList &li);
};
LinkList::LinkList()
{
head=new LinkNode();
len=0;
}
LinkList::~LinkList()
{
LinkNode *p=head,*q;
while (p!=NULL) {
q=p;
p=p->next;
delete q;
}
len=0;
head=NULL;
}
LinkNode *LinkList::LL_index(int i)
{
if(i>len || i<0)
return NULL;
LinkNode *p=head;
for(int j=0;j<i;j++)
p = p->next;
return p;
}
void LinkList::LL_create() {
int n;
cin>>n;
LinkNode *tail = head;
len = n;
while (n--)
{
int num;
cin>>num;
LinkNode *s = new LinkNode;
s->data = num;
tail->next = s;
tail = tail->next;
}
}
void LinkList::LL_display()
{
LinkNode *p=head;
while(p->next)
{
p=p->next;
cout<<p->data<<" ";
}
p=NULL;
delete p;
cout<<endl;
}
void LinkList::merge(LinkList &li) {
LinkList temp;
temp.len = len+li.len;
LinkNode *p=head->next,*q=li.head->next,*r=temp.head;
while (p && q)
{
LinkNode *s=new LinkNode;
if(p->data<q->data) {
s->data = p->data;
p=p->next;
}
else {
s->data = q->data;
q=q->next;
}
r->next = s;
r=r->next;
}
while (p){
LinkNode *s=new LinkNode;
s->data=p->data;
r->next = s;
r=r->next;
p=p->next;
}
while (q){
LinkNode *s=new LinkNode;
s->data=q->data;
r->next = s;
r=r->next;
q=q->next;
}
temp.LL_display();
}
int main()
{
LinkList myList1;
LinkList myList2;
myList1.LL_create();
myList2.LL_create();
myList1.merge(myList2);
return 0;
}