首页 > 其他分享 >leetcode21. 合并两个有序链表

leetcode21. 合并两个有序链表

时间:2023-09-25 17:06:20浏览次数:42  
标签:ListNode mergeTwoLists list1 list2 链表 有序 next leetcode21


合并两个有序链表

题目链接 21. 合并两个有序链表

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

示例 1:

leetcode21. 合并两个有序链表_数据结构

输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = [] 输出:[]

示例 3:

输入:l1 = [], l2 = [0] 输出:[0]

题目解释

这应该是我们见识过多额一道题,之前我们都是使用迭代法来解决的.今天我们使用递归.我们发现,将两个两个有序链表合成一个链表,保证有序.

算法原理

对于递归解法,我们判断,这两个链表的data,此时拿到一个较小的链表节点,然后我们继续找剩下的链表的合并.

leetcode21. 合并两个有序链表_递归_02

此时我们找到的重复的问题,就是简单的合并两个链表.

函数参数设置

然后把找到的节点的地址返回.那么此时的函数头和我们题目给的一样.

ListNode* mergeTwoLists(ListNode* list1, ListNode* list2);
函数体设置

下面就是我们的函数体设计

ListNode* mergeTwoLists(ListNode* list1, ListNode* list2)
{
    if(list1->val <= list2->val)
    {
        list1->next = mergeTwoLists(list1->next, list2);
        return list1;
    }
    else 
    {
        list2->next = mergeTwoLists(list1, list2->next);
        return list2;
    }
}

编写代码

缺一个递归出口,如果

  • 如果l1为空,那么返回l2
  • 如果l2为空,那么返回l1
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        if(list1 == nullptr)
        return list2;
        if(nullptr == list2)
        return list1;
        if(list1->val <= list2->val)
        {
            list1->next = mergeTwoLists(list1->next, list2);
            return list1;
        }
        else 
        {
            list2->next = mergeTwoLists(list1, list2->next);
            return list2;
        }
    }
};

leetcode21. 合并两个有序链表_有序链表_03

标签:ListNode,mergeTwoLists,list1,list2,链表,有序,next,leetcode21
From: https://blog.51cto.com/byte/7597257

相关文章

  • 头歌-01链表及其使用
    第一题#include"linearList.h"node*insertTail(node*h,node*t){//请在此添加代码,补全函数insertTail/**********Begin*********/if(h==NULL){t->next=NULL;returnt;}node*p=h;while(p->next){......
  • 两两交换链表中的节点、删除链表倒数第N个结点、链表相交、环形链表
    题目要求LeetCode24两两交换链表中的节点LeetCode19删除链表的倒数第N个结点LeetCode面试题02.07链表相交LeetCode142环形链表II题目思路24两两交换链表中的节点  本题采用具有虚拟头结点的链表来写,卡哥的示意图如下:  首先要交换的两个链表的前一个结点,然后修改指......
  • 算法打卡|Day4 链表part02
    Day4链表part02今日任务●24.两两交换链表中的节点●19.删除链表的倒数第N个节点●面试题02.07.链表相交●142.环形链表II[TOC]Problem:24.两两交换链表中的节点思路1.迭代法就要注意画图!画图!还是画图!另外迭代的次序不要忘记,链表迭代统一从左往右迭代。用三......
  • 力扣-链表组件
    1.问题给定链表头结点head,该链表上的每个结点都有一个唯一的整型值。同时给定列表G,该列表是上述链表中整型值的一个子集。返回列表G中组件的个数,这里对组件的定义为:链表中一段极长连续结点的值(该值必须在列表G中)构成的集合。极长的含义是:这段连续结点的前面或后面结点不......
  • 算法打卡|Day3 链表part01
    Day3链表part01今日任务●链表理论基础●203.移除链表元素●707.设计链表●206.反转链表[TOC]链表理论基础文章链接:https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html重点:单链表是一种通过指针串联在一起的线性结构,每一......
  • Leetcode刷题21.合并两个有序链表
    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例3:输入:l1=[],l2=[0]输出:[0] 提示:两个链表的节点数目......
  • 随想录Day4|24. 两两交换链表中的节点、19. 删除链表的倒数第N个节点、面试题 02.07.
    随想录Day4|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题02.07.链表相交、142.环形链表Ⅱ 24.两两交换链表中的节点文章讲解视频讲解给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,......
  • 【算法】链表
    1链表理论基础链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head。链表中的节点在内存中不是连续分布的,而是散乱分布在内......
  • 【Java 基础篇】Java TreeSet 详解:红黑树实现的有序集合
    Java集合框架提供了多种数据结构,用于存储和操作数据。其中,TreeSet是一种特殊类型的集合,它通过红黑树(Red-BlackTree)数据结构实现了有序的、唯一元素存储。本篇博客将深入探讨TreeSet,包括其概念、特性、内部实现、使用方法以及示例代码。无论您是初学者还是有一定经验的Java开......
  • 【Java 基础篇】Java LinkedHashSet 详解:有序唯一元素存储的完美选择
    Java中的集合框架提供了多种数据结构,用于存储和操作数据。LinkedHashSet是其中的一个特殊类型,它结合了哈希表和链表的特性,适用于需要保持元素插入顺序并确保唯一性的情况。本篇博客将详细介绍LinkedHashSet,包括它的概念、特性、使用方法以及示例代码,旨在帮助初学者更好地理解和......