面试题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 };