<img src="https://img-blog.youkuaiyun.com/20140908102955542?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvREhMMTIzNDU2Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
</pre><pre code_snippet_id="465523" snippet_file_name="blog_20140908_1_1080809" name="code" class="cpp">#include<iostream>
using namespace std;
struct ListNode
{
ListNode* pnext;
int value;
ListNode(int val):value(val),pnext(NULL)
{
}
};
ListNode* MergeList(ListNode* head1,ListNode* head2)
{
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
ListNode* newHead=NULL,*end=NULL;
if(head1->value>head2->value)
{
end=newHead=head2;
head2=head2->pnext;
}
else
{
end=newHead=head1;
head1=head1->pnext;
}
while(head1!=NULL&&head2!=NULL)
{
if(head1->value>head2->value)
{
end->pnext=head2;
end=end->pnext;
head2=head2->pnext;
}
else
{
end->pnext=head1;
end=end->pnext;
head1=head1->pnext;
}
}
if(head1!=NULL)
{
end->pnext=head1;
}
if(head2!=NULL)
{
end->pnext=head2;
}
return newHead;
}
ListNode* MergeSort(ListNode* head)
{
if(head==NULL)
return NULL;
ListNode* newHead,*pslow,*pfast;
newHead=pslow=pfast=head;
while(pfast->pnext!=NULL&&pfast->pnext->pnext!=NULL)
{
pslow=pslow->pnext;
pfast=pfast->pnext->pnext;
}
if(pslow->pnext==NULL)//如果pslow的pnext为NULL说明仅有一个节点
{
return pslow;
}
pfast=pslow->pnext;
pslow->pnext=NULL;
pslow=newHead;
newHead=MergeList(MergeSort(pslow),MergeSort(pfast));
return newHead;
}
void PrintListNode(ListNode* head)
{
while(head!=NULL)
{
cout<<head->value<<" ";
head=head->pnext;
}
cout<<endl;
}
void main()
{
ListNode* pnode1=new ListNode(3);
ListNode* pnode2=new ListNode(1);
ListNode* pnode3=new ListNode(4);
ListNode* pnode4=new ListNode(9);
ListNode* pnode5=new ListNode(8);
ListNode* pnode6=new ListNode(2);
ListNode* pnode7=new ListNode(7);
ListNode* pnode8=new ListNode(6);
ListNode* pnode9=new ListNode(3);
pnode1->pnext=pnode2;
pnode2->pnext=pnode3;
pnode3->pnext=pnode4;
pnode4->pnext=pnode5;
pnode5->pnext=pnode6;
pnode6->pnext=pnode7;
pnode7->pnext=pnode8;
pnode8->pnext=pnode9;
PrintListNode(pnode1);
ListNode*result=MergeSort(pnode1);
PrintListNode(result);
}