typedef struct LNode
{
int data;
struct LNode* next;
}LNode,*LinkList;
LinkList MergeList(LinkList head1,LinkList head2)
{
LinkList result;
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
if(head1->data<head2->data)
{
result=head1;
result->next=MergeList(head1->next,head2);
}
else
{
result=head2;
result->next=MergeList(head1,head2->next);
}
return result;
}
LinkList MergeList_1(LinkList head1,LinkList head2)
{
LinkList head,result=NULL;
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
while(head1&&head2)
{
if(head1->data<head2->data)
{
if(result==NULL)
{
head=result=head1;
head1=head1->next;
}
else
{
result->next=head1;
result=head1;
head1=head1->next;
}
}
else
{
if(result==NULL)
{
head=result=head2;
head2=head2->next;
}
else
{
result->next=head2;
result=head2;
head2=head2->next;
}
}
}
if(head1)
result->next=head1;
if(head2)
result->next=head2;
return head;
}
LinkList MergeSort(LinkList head)
{
if(head==NULL)
return NULL;
LinkList r_head,slow,fast;
r_head=slow=fast=head;
while(fast->next!=NULL&&fast->next->next!=NULL)
{
slow=slow->next;
fast=fast->next->next;
}
if(slow->next==NULL)
{//仅有一个节点
return r_head;
}
//形成两个链表 分别为fast和slow
fast=slow->next;
slow->next=NULL;
slow=head;
r_head=MergeList(MergeSort(slow),MergeSort(fast));
return r_head;
}
单链表的归并排序
最新推荐文章于 2022-08-28 16:33:55 发布