合并两个排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点依然是按照递增排序的。

链表结点定义如下:

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 }

例子:

posted @ 2013-05-14 16:48  hust_枫  阅读(277)  评论(1编辑  收藏  举报