单链表的排序(归并排序)

<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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值