俩个有序链表合并

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入: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;
    }
        
    }
};

 

posted on 2019-04-07 18:08  腻烦s  阅读(61)  评论(0)    收藏  举报

导航