面试题25. 合并两个排序的链表

题目:

 

 

解答:

方法一:递归。

 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6             val(x), next(NULL) {
 7     }
 8 };*/
 9 class Solution {
10 public:
11     ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
12     {
13         if (NULL == pHead1)
14         {
15             return pHead2;
16         }
17         if (NULL == pHead2)
18         {
19             return pHead1;
20         }
21         
22         ListNode *ret;
23         
24         if(pHead1->val < pHead2->val)
25         {
26             ret = pHead1;
27             ret->next = Merge(pHead1->next, pHead2);
28         }
29         else
30         {
31             ret = pHead2;
32             ret->next = Merge(pHead1, pHead2->next);
33         }
34         return ret;
35     }
36 };

 

方法二:迭代遍历。

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) 
12     {
13         if (NULL == l1)
14         {
15             return l2;
16         }
17         if (NULL == l2)
18         {
19             return l1;
20         }
21 
22         ListNode *dummy = new ListNode(0);
23         ListNode *cur = dummy;
24 
25         while (l1 && l2)
26         {
27             if (l1->val <= l2->val)
28             {
29                 cur->next = l1;
30                 l1 = l1->next;
31             }
32             else
33             {
34                 cur->next = l2;
35                 l2 = l2->next;
36             }
37 
38             cur = cur->next;
39         }
40 
41         cur->next = l1 == NULL ? l2 : l1;
42 
43         return dummy->next;
44 
45     }
46 };

 

posted @ 2020-05-09 14:32  梦醒潇湘  阅读(119)  评论(0)    收藏  举报