问题重述
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。链表结构的定义如下:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
思路解析
这道题经常会被问到,但是还是非常简单的。我们只需要从两个链表的头节点开始遍历,取较小的加入到新链表上即可,可参照下图所示的拼接过程。
代码实现
/*
利用递归的方法进行解决
*/
ListNode* Merge(ListNode* p1, ListNode* p2)
{
if (p1 == NULL)
return p2;
else if (p2 == NULL)
return p1;
ListNode* newHead = NULL;
if (p1->m_nValue < p2->m_nValue)
{
newHead = p1;
newHead->m_pNext = Merge(p1->m_pNext, p2);
}
else
{
newHead = p2;
newHead->m_pNext = Merge(p1, p2->m_pNext);
}
return newHead;
}