力扣leetcode 21. 合并两个有序链表 递归 C语言解法

news/2025/2/25 18:48:12

题目:

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非递减顺序 排列

思路:

  • 终止条件:当 list1list2 为空时,直接返回另一个链表的头节点。这样如果其中一个链表为空,函数会立即返回另一个链表

  • 比较当前节点值:递归地比较 list1list2 当前节点的值,选择较小的节点作为当前合并链表的头部,并让它的 next 指针指向合并后的子链表

    • 如果 list1->val < list2->val,则 list1 作为新链表的头部,并递归合并 list1->nextlist2
    • 否则,list2 作为新链表的头部,并递归合并 list1list2->next
  • 返回合并后的链表:每次递归调用返回较小节点,并继续连接剩余部分,最终构建完整的合并链表

代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    if(list1 == NULL){
        return list2;
    }
    if(list2 == NULL){
        return list1;
    }
    if(list1 -> val < list2 -> val){
        list1 -> next = mergeTwoLists(list1 -> next, list2);
        return list1;
    }else{
        list2 -> next = mergeTwoLists(list1, list2 -> next);
        return list2;
    }
}

设计递归算法的三要素:

  1. 明确结束的条件
  2. 明确终止时采取的办法
  3. 提取需要重复进行的部分

http://www.niftyadmin.cn/n/5865848.html

相关文章

使用Python爬虫获取淘宝商品详情:API返回值说明与案例指南

在电商数据分析和运营中&#xff0c;获取淘宝商品详情是常见的需求。淘宝开放平台提供了丰富的API接口&#xff0c;允许开发者通过合法的方式获取商品信息。本文将详细介绍如何使用Python编写爬虫&#xff0c;通过淘宝API获取商品详情&#xff0c;并解析API返回值的含义和结构。…

第二章:辅助功能

目录 第一节&#xff1a;工作目录创建 第二节&#xff1a;属性定义 第三节&#xff1a;日志宏 第四节&#xff1a; SqliteHelper 第五节&#xff1a; FileHelper 下期预告&#xff1a; 第一节&#xff1a;工作目录创建 在家目录创建一个名为mq的目录&#xff0c;mq里又创…

WSL2使用Kind创建K8S集群时出现IPV6网络创建失败

机器信息&#xff1a; ubuntu 22.04 kind 版本 0.17.0 通过命令创建k8s集群 kind create cluster --image kindest/node:v1.25.3 --name aio -v 5 出现如下报错&#xff1a; ERROR: failed to create cluster: failed to ensure docker network: command "docker ne…

Threejs教程一【三要素】

场景 场景是一个容器&#xff0c;用于容纳所有的物体、光源、相机等元素。 // 创建场景 const scene new THREE.Scene(); //修改背景颜色&#xff0c;颜色支持十六进制、rgb、hsl、贴图等 scene.background new THREE.Color(0x000000);相机 相机决定了渲染的结果&#xff…

DeepSeek开源FlashMLA:颠覆大模型训练效率的新一代技术解析

在AI领域&#xff0c;大模型的训练成本与效率始终是开发者面临的“阿喀琉斯之踵”。动辄千亿参数的模型需要消耗数月时间与数百万美元的计算资源&#xff0c;严重制约了技术创新。2023年&#xff0c;中国AI公司深度求索&#xff08;DeepSeek&#xff09;开源的FlashMLA框架&…

在Ubuntu下通过Docker部署PSQL服务器

嘿&#xff0c;朋友们&#xff0c;今天我们来聊聊如何在Ubuntu上通过Docker部署PostgreSQL&#xff08;PSQL&#xff09;服务器。Docker让我们可以轻松管理应用程序的环境&#xff0c;而PostgreSQL是个强大的开源关系数据库。它以其稳定性、扩展性和丰富的功能而著称&#xff0…

Wireshark简单教程

1.打开Wireshark,点击最上面栏目里面的“捕获”中的“选项” 2.进入网卡选择界面,选择需要捕获的选择&#xff0c;这里我选择WLAN 3.双击捕获选择出现下面界面 4.点击如下图红方框即可停止捕获 5.点击下图放大镜可以进行放大 6.你也可以查询tcp报文如下图

C++双指针:算法优化的“左右互搏术”与高效问题破解全指南

C双指针&#xff1a;算法优化的“左右互搏术”与高效问题破解全指南 开篇故事&#xff1a;迷宫中的“双人探路策略” 想象两名探险者在迷宫中寻找出口&#xff1a; 快慢指针&#xff1a;一人快速探索死路&#xff0c;另一人稳步记录正确路径。左右指针&#xff1a;两人从两端…