使用递归
#include <iostream>
using namespace std;
typedef struct _Node
{
int data;
struct _Node *next;
}Node,*PNode;
PNode BuildList()
{
int data;
int i=0;
PNode head,p,pfront;
cin>>data;
while(data!=-1)
{
i++;
p=(PNode)malloc(sizeof(Node));
p->data=data;
p->next=NULL;
if(i==1)
head=p;
else
{
pfront->next=p;
}
pfront=p;
cin>>data;
}
return head;
}
PNode MergeSortList(PNode p1,PNode p2)
{
PNode ret;
if(!p1)
return p2;
if(!p2)
return p1;
if(p1->data<p2->data)
{
ret=p1;
p1->next=MergeSortList(p1->next,p2);
}
else
{
ret=p2;
p2->next=MergeSortList(p1,p2->next);
}
return ret;
}
void Print(PNode p)
{
PNode tmp=p;
while(tmp)
{
cout<<tmp->data<<endl;
tmp=tmp->next;
}
}
int main()
{
PNode head;
PNode p1;
PNode p2;
p1=BuildList();
Print(p1);
p2=BuildList();
Print(p2);
head=MergeSortList(p1,p2);
Print(head);
return 0;
}