合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点依然是按照递增排序的。
链表结点定义如下:
1 struct ListNode 2 { 3 int m_nValue; 4 ListNode* m_pNext; 5 };
思路:利用递归。每一次把具有较小值的结点赋给MergeHead,MergeHead->m_pNext是合并剩下链表所返回的头结点。
1 ListNode* MergeSortedList(ListNode *pHead1, ListNode *pHead2) 2 { 3 if (pHead1 == NULL) 4 { 5 return pHead2; 6 } 7 else if (pHead2 == NULL) 8 { 9 return pHead1; 10 } 11 12 ListNode *pMergeHead = NULL; 13 //把具有较小值的结点赋给pMergeHead 14 if (pHead1->m_nValue < pHead2->m_nValue) 15 { 16 pMergeHead = pHead1; 17 //pMergeHead->m_pNext是合并剩下链表所返回的头结点 18 pMergeHead->m_pNext = MergeSortedList(pHead1->m_pNext, pHead2); 19 } 20 else 21 { 22 pMergeHead = pHead2; 23 pMergeHead->m_pNext = MergeSortedList(pHead1, pHead2->m_pNext); 24 } 25 return pMergeHead; 26 }
例子:
不经历风雨,怎么见彩虹!