这是面试中经常被提到的问题。下图表示链表1和链表2合并成链表3:
1.用递归算法更加简单好理解,即链表1的头结点值小于链表2头结点的值,我们就将链表1作为合并后链表的头结点,在剩余结点中,链表2的头结点值小于链表1头结点的值,我们将链表二的头结点作为合并链表的后续结点,且剩余结点依然是有序的,合并的步骤和之前一样,如下图:
递归代码如下:
ListNode* Merge(ListNode* pHead1,ListNode* phead2)
{
if(pHead1 == NULL)
return pHead2;
else if(pHead2 == NULL)
return pHead1;
ListNode* pMergedHead = NULL;
if(phead1 -> m_nValue < pHead2 -> m_nValue)
{
pMergedHead = pHead1;
pMergedHead -> m_pNext = Merge(pHead1 -> m_pNext , pHead2);
}
else
{
pMergedHead = pHead2;
pMergedHead -> m_pNext = Merge(pHead1,pHead2 -> m_pNext);
}
re