使用的链表相关定义及函数在:链表最小结构(C++版本)
假设链表本身是升序排序的。
递归实现:
ListNode* MergeList(ListNode* pNode1, ListNode* pNode2)
{
if (nullptr == pNode1) return pNode2;
if (nullptr == pNode2) return pNode1;
ListNode* pMergeNode = nullptr;
if (pNode1->data < pNode2->data)
{
pMergeNode = pNode1;
pMergeNode->pNext = MergeList(pNode1->pNext, pNode2);
}
else
{
pMergeNode = pNode2;
pMergeNode->pNext = MergeList(pNode1, pNode2->pNext);
}
return pMergeNode;
}
循环实现:
ListNode* MergeList(ListNode* pNode1, ListNode* pNode2)
{
if (nullptr == pNode1) return pNode2;
if (nullptr == pNode2) return pNode1;
ListNode* pNewHead = new ListNode(-1);
ListNode* pCurNode = pNewHead;
while (pNode1 != nullptr && pNode2 != nullptr)
{
if (pNode1->data < pNode2->data)
{
pCurNode->pNext = pNode1;
pNode1 = pNode1->pNext;
}
else
{
pCurNode->pNext = pNode2;
pNode2 = pNode2->pNext;
}
pCurNode = pCurNode->pNext;
}
if (pNode1 != nullptr) pCurNode->pNext = pNode1;
if (pNode2 != nullptr) pCurNode->pNext = pNode2;
ListNode* pSymbolNode = pNewHead;
pNewHead = pNewHead->pNext;
delete pSymbolNode;
return pNewHead;
}