leetcode_数据结构_链表_21合并两个有序链表(递归初步)

Posted SanFranciscoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode_数据结构_链表_21合并两个有序链表(递归初步)相关的知识,希望对你有一定的参考价值。

递归初步学习参考了以下博客:

https://lyl0724.github.io/2020/01/25/1/

本题:

https://leetcode-cn.com/problems/merge-two-sorted-lists/

将两个有序l1,l2链表合并为一个链表,首先考虑,当l1为NULL时,返回l2,当l2为NULL时,返回l1,当两个链表都不为空时,讨论以下内容:

递归的返回条件:

所有结点合并完毕后,即某一个链表为空时

接下来讨论,当递归进行到某一级时,应该怎么做。不妨假设到第一级时,有l1,l2,以及l1,l2之后已经合并好的链表,那么,应该比较l1,l2的值,他们两个较大者应该与 已经合并好的链表 合并,然后较小者再指向新合并好的链表,比如,l1->val<l2->val,那么l1->next=merge(l1->next,l2)

/**
 * 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==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(l2->next,l1);
            return l2;
        }
    }
};

 

以上是关于leetcode_数据结构_链表_21合并两个有序链表(递归初步)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(21. 合并两个有序链表)

leetcode——21. 合并两个有序链表

合并两个有序链表_21

leetcode 每日一题 21. 合并两个有序链表

[算法] leetcode单链表相关题目详解

每日LeetCode力扣(21~25)