一.题目:
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。链表结点定义如下:
struct ListNode {
int m_nValue;
ListNode* m_pNext;
};
二.分析:
1.当我们得到两个链表中的值较小的头结点并把它链接到已经合并的链表之后,两个链表剩余的结点依然是排序的,因此合并的步骤和之前步骤是一样的。这就是典型的递归的过程。
2.在本题中一旦输入空的链表就会引入空的指针,因此我们要对空链表单独处理。
三.答案:
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->m_pNext = Merge(pHead1->m_pNext, pHead2);
pMergedHead = pHead1;
} else {
pMergedHead->m_pNext = Merge(pHead1, pHead2->m_pNext);
pMergedHead = pHead2;
}
return pMergedHead;
}
四.相关题目:
无