LeetCode21. 合并两个有序链表
题目
分析
本题可以直接模拟,可以递归
代码
递归
1 class Solution { 2 public: 3 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 4 if(l1 == NULL) return l2; 5 if(l2 == NULL) return l1; 6 if(l1->val < l2->val){ 7 l1->next = mergeTwoLists(l1->next,l2); 8 return l1; 9 }else{ 10 l2->next = mergeTwoLists(l1,l2->next); 11 return l2; 12 } 13 } 14 };
1 class Solution { 2 public: 3 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 4 5 ListNode* preHead = new ListNode(-1); 6 ListNode* p = preHead; 7 8 while(l1 && l2 ){ 9 if(l1->val > l2->val){ 10 p->next = l2; 11 l2 = l2->next; 12 } 13 else { 14 p->next = l1; 15 l1 = l1->next; 16 } 17 p = p->next; 18 } 19 20 if(!l1) while(l2) { p->next = l2;l2 = l2->next; p = p->next; } 21 22 if(!l2) while(l1) { p->next = l1;l1 = l1->next;p = p->next; } 23 24 return preHead->next; 25 26 } 27 };
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode() : val(0), next(nullptr) {} 7 * ListNode(int x) : val(x), next(nullptr) {} 8 * ListNode(int x, ListNode *next) : val(x), next(next) {} 9 * }; 10 */ 11 class Solution { 12 public: 13 ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { 14 auto dummy = new ListNode(-1),tail = dummy; 15 while(l1 && l2){ 16 if(l1->val <= l2->val){ 17 tail->next = l1; 18 tail = tail->next; 19 l1 = l1->next; 20 }else{ 21 tail->next = l2; 22 tail = tail->next; 23 l2 = l2->next; 24 } 25 } 26 27 if(l1) tail->next = l1; 28 if(l2) tail->next = l2; 29 30 return dummy->next; 31 32 } 33 };
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号