链表归并排序

Struct ListNode
{
	int data;
	ListNode* next;
}


ListNode* GetMidNode(ListNode* list)
{
	if(list==NULL)
		return NULL;
	ListNode* low=list;
	ListNode* fast=list;
	while(fast->next->next!=NULL)
	{
		low=low->next;
		fast=fast->next->next;
	}
	return low;
}


//递归合并
ListNode* MergeList(ListNode* List1,ListNode* List2)
{
	ListNode* pHead1=List1;
	ListNode* pHead2=List2;
	ListNode* pMergeHead;
	
	if(List1==NULL && List2==NULL)
		return NULL;
	if(List1==NULL)
		pMergeHead=List2;
	if(List2==NULL)
		pMergeHead=List1;
	
	if(pHead1->data > pHead2->data)
	{
		pMergeHead=pHead2;
		return MergeList(pHead1,pHead2->next);
	}
	else
	{
		pMergeHead=pHead1;
		return MergeList(pHead1->next,pHead2);
	}
}
//非递归合并
ListNode* MergeList(ListNode* List1,ListNode* List2)
{
	ListNode* pHead1=List1;
	ListNode* pHead2=List2;
	ListNode* pMergeHead=NULL;
	
	if(List1==NULL && List2==NULL)
		return NULL;
	if(List1==NULL)
		pMergeHead=List2;
	if(List2==NULL)
		pMergeHead=List1;
	
	if(pHead1->data > pHead2->data)
	{
		pMergeHead=pHead2;
		pHead1=pHead1->next;
	}
	else
	{
		pMergeHead=pHead1;
		pHead2=pHead2->next;
	}
	while(pHead1!=NULL && pHead2!=NULL)
	{
		if(pHead1->data<pHead2->data)
		{
			pMergeHead->next=pHead1;
			pMergeHead=pMergeHead->next;
			pHead1=pHead1->next;
		}
		else
		{
			pMergeHead->next=pHead2;
			pMergeHead=pMergeHead->next;
			pHead2=pHead2->next;			
		}
	}
	pMergeHead->next=pHead1?pHead1:pHead2;
	return pMergeHead;
}




ListNode* MergeSort(ListNode* list)
{
	if(list==NULL || list->next==NULL)
		return NULL;
	ListNode* pHead1=list;
	ListNode* pHead2=GetMidNode(list);//获取中间结点,将链表分成两段
	pHead1=MergeSort(pHead1);//对两段链表排序
	pHead2=MergeSort(pHead2);
	return MergeList(pHead1,pHead2);//合并两段链表
	
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值