问题:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的?
需要合并的链表为1和2,合并后的效果如3。
分析:
首先分析合并两个链表的过程。我们的分析从合并两个链表的头结点开始。链表1的头结点的值小于链表2的头结点的值,因此链表1的头结点将是合并后链表的头结点。在两个链表中剩下的结点依然是排序的,因此合并这两个链表的步骤和前面的步骤是一样的。我们还是比较两个头结点的值。此时链表2的头结点的值小于链表1的头结点的值,因此链表2的头结点的值将是合并剩余结点得到的链表的头结点。我们把这个结点和前面合并链表时得到的链表的尾结点(值为1的结点)链接起来。
代码:
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
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); } return pMergedHead; } |
非递归: