剑指offer--递归非递归合并两个有序链表

面试题:合并两个有序链表,合并之后需要变为有序

对于此题,我想到的有两种解法:递归和非递归

递归实现:

//递归
Node *MergeList(Node *pHead1, Node*pHead2)
{
	
	if (pHead1 == NULL)
		return pHead2;
	else if (pHead2 == NULL)
		return pHead1;
	else
	{ 
		Node*pHead = NULL;
		if(pHead1->_data  <= pHead2->_data )
		{
			pHead = pHead1;
			pHead->_next = MergeList(pHead1->_next, pHead);
		}
		else
		{
			pHead = pHead2;
			pHead->_next = MergeList(pHead1, pHead2->_next );
		}
	}
	return pHead;
}

非递归实现:

//非递归
Node *MergeList(Node*pHead1, Node*pHead2)
{  
	Node*cur = NULL;
	Node*pHead = NULL;
	if (pHead1 == NULL)
		pHead= pHead2;
	else if (pHead2 == NULL)
		pHead=pHead1;
	else
	{
		if (pHead1->_data <= pHead2->_data)
		{
			pHead = pHead1;
			pHead1 = pHead1->_next;
		}
		else
		{
			pHead = pHead2;
			pHead2 = pHead2->_next;
		}
		cur = pHead;
		while (pHead1 != NULL&&pHead2 != NULL)
		{
			if (pHead1->_data <= pHead2->_data)
			{
				cur->_next = pHead1;
				pHead1 = pHead1->_next;
			}
			else
			{
				cur->_next = pHead2;
				pHead2 = pHead2->_next;
			}
			cur = cur->_next;

		}
		if (pHead1 == NULL)
			cur->_next = pHead1;
		else
			cur->_next = pHead2;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值