力扣 21. 合并两个有序链表 链表+递归

https://leetcode-cn.com/problems/merge-two-sorted-lists/
在这里插入图片描述
思路一:迭代做法。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode head(0);
        ListNode *cur=&head;
        while(l1&&l2){
            if(l1->val<=l2->val)
                cur->next=l1,l1=l1->next;
            else
                cur->next=l2,l2=l2->next;
            cur=cur->next;
        }
        cur->next=l1?l1:l2;
        return head.next;
    }
};

思路二:递归做法。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(!l1)
            return l2;
        if(!l2)
            return l1;
        if(l1->val<=l2->val){
            l1->next=mergeTwoLists(l1->next,l2);
            return l1;
        }
        else{
            l2->next=mergeTwoLists(l1,l2->next);
            return l2;
        }
    }
};
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页