俩个有序链表合并
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
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 if(l1 == NULL){return l2;} 13 if(l2 == NULL){return l1;} 14 15 struct ListNode *phead = NULL,*pnew = NULL; 16 if(l1->val<=l2->val) 17 { 18 phead = l1; 19 l1 = l1->next; 20 } 21 else 22 { 23 phead = l2; 24 l2= l2->next; 25 } 26 pnew = phead; 27 28 while(l1!=NULL&&l2!=NULL) 29 { 30 if(l1->val <= l2->val) 31 { 32 pnew->next = l1; 33 l1 = l1->next; 34 pnew = pnew->next; 35 } 36 else 37 { 38 pnew->next = l2; 39 l2= l2->next; 40 pnew = pnew->next; 41 } 42 } 43 pnew->next = l1!=NULL?l1:l2; 44 return phead; 45 46 } 47 };
递归:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if(l1 == NULL){return l2;} if(l2 == NULL){return l1;} if(l1->val < l2->val){ l1->next = mergeTwoLists(l1->next,l2); return l1; }else{ l2->next = mergeTwoLists(l1,l2->next); return l2; } } };
浙公网安备 33010602011771号