归并链表

归并链表是将两个链表合成一个链表,

合并后的链表依旧有序(升序)。

当然,前提是两个链表归并之前已经是有序的。

好了,废话不多说。

要是想了解MyList类的结构,请参考链表常用函数

源代码:

MyList.h

	void Merge(MyList& other);     // 归并链表

MyList.cpp

void MyList::Merge(MyList& other)
{
	if (NULL == other.m_pHead)
		return;

	if (NULL == m_pHead)
	{
		m_pHead = other.m_pHead;
		other.m_pHead = NULL;
		return;
	}

	ListNode* pNewHead = NULL;
	ListNode* pNewCur = NULL;

	ListNode* pMyCur = m_pHead;
	ListNode* pOtherCur = other.m_pHead;

	// 确定新链表的头结点
	if (pMyCur->nData < pOtherCur->nData)
	{
		pNewCur = pMyCur;
		pMyCur = pMyCur->pNext;
	}
	else
	{
		pNewCur = pOtherCur;
		pOtherCur = pOtherCur->pNext;
	}

	pNewHead = pNewCur;

	// 将两个链表中的节点链入新链表
	while (pMyCur != NULL && pOtherCur != NULL)
	{
		if (pMyCur->nData < pOtherCur->nData)
		{
			pNewCur->pNext = pMyCur;
			pNewCur = pMyCur;
			pMyCur = pMyCur->pNext;
		}
		else
		{
			pNewCur->pNext = pOtherCur;
			pNewCur = pOtherCur;
			pOtherCur = pOtherCur->pNext;
		}
	}

	// 链入剩余节点
	if (pMyCur != NULL)
		pNewCur->pNext = pMyCur;
	else
		pNewCur->pNext = pOtherCur;

	// 修改头指针
	other.m_pHead = NULL;
	m_pHead = pNewHead;
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值