一、题目描述
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。
二、代码实现
很容易想到,只需要定义两个指针分别指向两个链表头节点,依次往后扫描并比较,将较小的一个添加至新链表即可。值得注意的是,算法设计大量的指针操作,需要保证新链表没有断裂以及保证代码的鲁棒性。
struct ListNode
{
int *m_nValue;
ListNode* m_pNext;
};
ListNode* Merge(ListNode* pHeadA, ListNode* pHeadB)
{
if (pHeadA == NULL) //若A链表为空,那么显然合并之后的链表就是B
return pHeadB;
if (pHeadB == NULL) //同上理
return pHeadA;
ListNode* pMergeHead = NULL; //声明新链表的头节点
if (pHeadA->m_nValue < pHeadB->m_nValue)
{
pMergeHead = pHeadA;
pMergeHead->m_pNext = Merge(pHeadA->m_pNext, pHeadB);
}
else
{
pMergeHead = pHeadB;
pMergeHead->m_pNext = Merge(pHeadA, pHeadB->m_pNext);
}
return pMergeHead;
}