合并两个有序链表

合并两个有序链表,形成新的有序链表 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 题目来源:(LeetCode):https://leetcode-cn.com/problems/merge-two-sorted-lists 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 题目分析: 任意一... 阅读详情

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

示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

解法1(递归):

思路: 初始化一个头节点head,两个链表的第一个节点比较,取较小的节点连接在head上,使用递归的方法使除去该节点的两个链表重复上述步骤,直至一个链表结束(或同时结束),最后返回head头节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode* head;

    if(l1==NULL){
        return l2;
    }else if(l2==NULL){
        return l1;
    }
    
    if(l1->val<l2->val){
        head=l1;
        head->next=mergeTwoLists(l1->next,l2);
    }else{
        head=l2;
        head->next=mergeTwoLists(l1,l2->next);
    }
    return head;
}

解法2:

思路: 与上面算法思路相似,只是下面算法没有使用递归。该算法需注意这句( tail->next=l1 ? l1 : l2 ;),这句处理的是比较后,有剩余节点的链表拼接在tail后

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) 
{
    struct ListNode *head,*tail;
    if(l1==NULL)
        return l2;
    else if(l2==NULL)
        return l1;
    if(l1->val<l2->val)
    {
        head=l1;
        l1=l1->next;
    }
    else
    {
        head=l2;
        l2=l2->next;
    }
    tail=head;
    while(l1 && l2)
    {
        if(l1->val < l2->val)
        {
            tail->next=l1;
            l1=l1->next;
        }
        else
        {
            tail->next=l2;
            l2=l2->next;
        }
        tail=tail->next;
    }
    
    tail->next=l1?l1:l2;
    return head;
}
合并两个有序链表(递归) 数据结构-链表-合并两个有序链表(递归详细分析实现) 题目描述 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 /*数据结构*/ ListNode { int val; ListNode *next; } 示例 输入:1->2->4, 1->3->4 输出:1->1->2->3-&... 阅读详情

相关推荐

SIMPLIS实战:从零构建理想BUCK电路,精准计算与POP稳态分析

本文详细介绍了如何使用SIMPLIS软件从零开始构建并仿真一个理想的BUCK降压电路。通过设定关键参数、计算理想器件值,并搭建仿真模型,文章重点演示了暂态仿真以观察电路上电过程,并深入讲解了高效的POP(周期性工作点)稳态分析技术,帮助工程师快速验证设计、评估稳态性能,从而加速电源设计迭代。

weixin_29165465的博客 397

合并两个有序的链表

合并两个有序的链表 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 1. 递归版本 根据上面的图得到 , 先创建一个新的结点 , 然后比较两个链表的第一个节点 , 哪个节点的值小 , 就作为新的头节点 /* struct ListNode { int val; struct ListNode *next; L...

如故的博客 353

HTTP 代理服务器的设计与实现

HTTP 代理服务器的设计与实现 首先当然是最重要的代码:github地址 1) 实验目的 熟悉并掌握 Socket 网络编程的过程与技术;深入理解 HTTP 协议,掌握 HTTP 代理服 务器的基本工作原理;掌握 HTTP 代理服务器设计与编程实现的基本技能。 2) 实验内容 基于 java 实现了基本功能与全部附加功能,并增加了 https 的支持 (1) 设计并实现一个基本 HTTP 代理服...

qq_42754642的博客 1888

指针在链表中——合并两个有序链表(链表头结点)

本来是个简单的题目,但是温故而知新,从指针的角度来重分析一下此题。 题目: 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路: 链表和二叉树是最常见的指针题,说到底无非就是指针指向问题。 在实际的应用中,指针...

yanchenzhi的博客 1392

电阻的基本原理、参数、应用与选型

电阻的基本原理、电阻的分类、参数,应用与选型,0欧姆电阻的介绍等。

luobeihai的博客 1万+

从零到一:基于JasperGold的FPV实战入门与避坑指南

本文详细介绍了基于JasperGold的形式化验证(FPV)实战入门指南,涵盖环境搭建、SVA断言编写、TCL脚本调试等关键步骤。通过实际案例解析,帮助IC设计工程师掌握FPV技术,有效验证RTL设计中的复杂逻辑和corner case,提升验证效率与质量。

weixin_30899023的博客 364

合并两个有序链表,并输出

public class TestCom { public static &lt;T extends Comparable&gt; void mix(linkList&lt;T&gt; la, linkList&lt;T&gt; lb, linkList&lt;T&gt; lc){ //合并链表的方法 Node&lt;T&gt; na = la.ge...

ChenZhuo_dut的博客 577

【农业生产系统模型】基于R语言APSIM模型进阶应用与参数优化、批量模拟实践技术

APSIM模型有Classic和Next Generation两个系列模型,能模拟几十种农作物、牧草和树木的土壤-植物-大气过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。R语言是一门应用场景广泛、简单易学的程序语言,APSIM模型开发了许多R语言辅助包,在APSIM模型的气候、土壤、管理措施等数据准备,自动化模拟,参数优化和结果分析上都发挥着重要的作用。案例一:APSIM模型输入参数和土壤文件的制备。

2303_79243743的博客 1047

LeetCode 图解 | 21.合并两个有序链表

点击上方蓝字设为星标下面开始今天的学习~今天分享的题目来源于 LeetCode 上第 21 号问题:合并两个有序链表。题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接...

程序员吴师兄的博客 1万+

RoboMaster电控入门:手把手教你用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机

本文详细介绍了如何使用STM32CubeMX配置大疆C板CAN总线驱动GM6020电机,适用于RoboMaster电控入门。从硬件准备到CubeMX工程初始化,再到CAN过滤器配置和电机控制协议解析,手把手教你避开常见配置陷阱,实现精准控制。

weixin_42524762的博客 269

Wi-Fi物理帧间隔概念简介

物理帧间隔概念简介。

1042484520@qq.com(邮箱) 1779

合并两个有序链表(Java)

题目描述 将两个有序链表合并成一个有序链表 解决 递归 代码: //递归 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null) return l2; if(l2 == null) return l1; if(l1.val &lt; l2.val){ ...

LrvingTc的博客 2006

[Dify实战] 招聘筛简历机器人:自动筛选、排序、生成面试要点-带绑定资源

摘要:本文介绍了如何利用Dify优化简历筛选流程,解决人工筛选耗时、标准不统一等问题。通过结构化输出"评分+亮点+风险+面试关注点",将主观判断转化为规则化流程。关键步骤包括:设计标准化Prompt、配置权重排序策略、确保公平合规性、与ATS系统对接,以及持续优化评估指标。该方法能显著提升筛选效率(缩短招聘周期)、增强一致性(避免主观偏差),并为面试官提供结构化参考信息,最终实现更高效精准的人才筛选。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 581

合并两个有序链表 图解说明

合并两个有序链表 题目描述 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 题目解析 假设两个链表分别为l1和l2 当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一...

AllenSquirrel 5451

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

将两个有序链表合并

无

weixin_47988506的博客 8040

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

将两个递增的有序链表合并为一个递增的有序链表

要求结果链表仍使用原来两个链表的存储空间,不另外占用其他存储空间。表中不允许有重复的数据。

weixin_60593311的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

算法 链表 合并两个有序链表

迭代法是最直观的方法,通过比较两个链表的当前节点值,较小的节点被添加到结果链表中,然后移动相应链表的指针。合并两个有序链表意味着将两个已排序的链表合并成一个新的有序链表,新链表中的元素也应保持原有的排序关系。一个有效的方法是使用优先队列(最小堆),每次取出最小的节点加入结果链表,然后将该节点的下一个节点重新加入队列。递归法利用了递归的思想,每次选择两个链表中较小的节点作为新链表的一部分,并将该节点的下一个指针指向其余部分的合并结果。通过上述方法和技巧的学习与实践,可以有效地提升处理链表相关问题的能力。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 2673

合并两个有序链表 java_合并两个有序链表

合并两个有序链表No more than a platitudeMerge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input: 1->2->...

weixin_39565777的博客 142

Leetcode 21. 合并两个有序链表

Leetcode 21. 合并两个有序链表1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/   本质上就是一个链表操作问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #includ

珍惜 9493

【递归】合并两个有序链表

​ 可以发现对每个节点的操作其实都是一样的,都是比较当前两个节点的大小然后进行返回,所以我们就可以将每个相同的操作抽象出来作为递归函数体,然后我们只需要设计函数头和处理递归出口即可!分别指向两个有序链表的头节点,我们每次只要找到小的那个节点将其返回,然后剩下的事情交给剩余节点去比较然后进行返回即可。每次我们返回两个指针中小的那个即可,但是在返回之前,我们需要将当前的节点,假如当前 list1。很明显,当两个链表指针走到空的时候就是递归的终止时候,如果说 list1。进行比较,以此类推,对于 list2。

lirendada的博客 957

两个有序链表的合并

二、实验分析(1)问题分析1、考虑两个链表L1,L2中数据的多少;2、用两个指针同时遍历两个有序链表L1,L2,并且比较每次读取的两个链表元素的数值,将其中的小值插入到新的链表L中。3、考虑到其中链表L1(或者L2)由于元素少,而被先遍历完,另个链表L2(或者L1)直接接在新的链表L表尾;4、函数返回新链表L的表头。(2)实现要点1、设置指针t1遍历L1,指针t2遍历L2,指针Ptr指向合适的结点...

Dearlittleone的博客 1万+

JAVA 将两个有序链表合并为一个有序链表

将两个有序链表合并为一个有序链表 思路: 1.必须保证两个链表为有序链表 2.在两个链表都不为空的条件下,设一个 last=null; (1)如果链表1的值小于等于链表2的值,进行循环,先放链表1的值到新链表result,如果result为空,视为头插,如果不为空,视为尾插,其中要保证last永远为最后一个结点,最后让循环走起来 (2)如果链表2的值小于链表1的值,与(1)中方法相同,只是链表1全换为链表2即可 3.如果链表2为空了,链表1不为空时,把链表1接在last的下一个,之后,可以.

Sundy_sc的专栏 2486

两个有序链表合并为一个

将两个有序链表合并为一个有序链表,不允许使用额外的内存空间

且将&的博客 5274

【刷题之路】LeetCode 21. 合并两个有序链表

空间复杂度:O(m+n),m和n分别为两个链表的长度,空间复杂度递归调用的层数,最坏情况下,对于两个链表的每个节点我们都要调用一次,因此空间复杂度为O(m+n)。所以我们可以将思路转化为,每次调用只需要选出较小的节点然后让较小的节点连接上后面合并后的链表即可,而后面的链表的合并也是用同样的递归方式来完成。其实从上面的解法中我们也能得到启发想出一个大事化小的解法,因为我们每次的遍历只需要选出一个较小的节点,然后尾插到新链表之中。时间复杂度:O(m+n),其中m和n分别为两个链表的长度。

kk702392702的博客 1140
上一篇: 反转链表
下一篇: 环形链表
coder_flag
博客等级 码龄9年 2粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值