分两种:1、申请额外空间;2、不申请额外空间
<span style="font-size:18px;">#include <iostream>
#include <string>
#include <algorithm>
#include <stack>
#include <queue>
#include <time.h>
using namespace std;
struct node
{
int data;
node *next;
};
void create(node *&head)
{
node *p1=NULL,*p2=NULL;
int data;
cin>>data;
if(data==-1)
{
return;
}
while(data!=-1)
{
if(head==NULL)
{
head=new node;
head->data=data;
p1=head;
}
else
{
p2=new node;
p2->data=data;
p1->next=p2;
p1=p2;
}
cin>>data;
}
if(p1!=NULL)
p1->next=NULL;
}
void print(node *T)
{
if(T==NULL)
return;
while(T)
{
cout<<T->data<<endl;
T=T->next;
}
}
void merge1(node *head1,node *head2,node *&head)
{
node *p1=NULL,*p2=NULL;
while(head1 && head2)
{
if(head1->data<head2->data)
{
if(head==NULL)
{
head=new node;
head->data=head1->data;
p1=head;
}
else
{
p2=new node ;
p2->data=head1->data;
p1->next=p2;
p1=p2;
}
head1=head1->next;
}
else
{
if(head==NULL)
{
head=new node;
head->data=head2->data;
p1=head;
}
else
{
p2=new node ;
p2->data=head2->data;
p1->next=p2;
p1=p2;
}
head2=head2->next;
}
}
while(head1)
{
if(head==NULL)
{
head=new node;
head->data=head1->data;
p1=head;
}
else
{
p2=new node ;
p2->data=head1->data;
p1->next=p2;
p1=p2;
}
head1=head1->next;
}
while(head2)
{
if(head==NULL)
{
head=new node;
head->data=head2->data;
p1=head;
}
else
{
p2=new node ;
p2->data=head2->data;
p1->next=p2;
p1=p2;
}
head2=head2->next;
}
if(p1==NULL)
return;
else
p1->next=NULL;
}
node* merge2(node *head1,node *head2)
{
node *head=NULL;
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
if(head1->data<head2->data)
{
head=head1;
head->next=merge2(head1->next,head2);
}
else
{
head=head2;
head->next=merge2(head1,head2->next);
}
return head;
}
void main()
{
node *head1=NULL,*head2=NULL,*head=NULL;
create(head1);
//print(head1);
create(head2);
cout<<"-------------------"<<endl;
merge1(head1,head2,head);
//head=merge2(head1,head2);
print(head);
}</span>