LeetCode21. 合并两个有序链表(Java)

合并两个有序链表(java) 这个方法中,我们使用两个指针 l1 和 l2 分别指向两个输入链表的当前节点,然后比较它们的值,将较小的节点添加到新链表中,同时移动相应的指针。最后,我们检查是否有一个链表还有剩余元素,如果有,直接将它们接在新链表的末尾。使用迭代方法合并两个有序链表是比较直接的方式。我们可以创建一个哑节点(dummy node)来简化合并过程,并使用一个指针指向当前节点。合并两个有序链表是一个常见的算法问题,特别在链表操作中。这个问题可以使用递归或迭代的方式解决,下面将详细讲解如何在Java中合并两个有序链表。 阅读详情

题目:

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

示例:
在这里插入图片描述
代码:

  • 解法一l
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode p1=l1;
        ListNode p2=l2;
        ListNode root=new ListNode(0);
        ListNode rear=root;
        while(true){
            if(p1==null&&p2==null){
                break;
            }else if(p1!=null&&p2==null){
                rear.next=p1;
                rear=p1;
                break;
            }else if(p1==null&&p2!=null){
                rear.next=p2;
                rear=p2;
                break;
            }else if(p1.val>=p2.val){
                rear.next=p2;
                rear=p2;
                p2=p2.next;
                rear.next=null;
            }else{
                rear.next=p1;
                rear=p1;
                p1=p1.next;
                rear.next=null;
            }
        }
        return root.next;
    }
}

解题思路:
在这里插入图片描述

  • 别人的代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) return l2;
        if (l2 == null) return l1;
 
        ListNode head = null;
        if (l1.val <= l2.val){
            head = l1;
            head.next = mergeTwoLists(l1.next, l2);
        } else {
            head = l2;
            head.next = mergeTwoLists(l1, l2.next);
        }
        return head;
    }   
}
【Transformer 相关理论深入理解】注意力机制、自注意力机制、多头注意力机制、位置编码 transformer原理 阅读详情

相关推荐

AFSim 2.9中文手册实战指南:从安装到高级功能详解(附B站视频链接)

本文详细介绍了AFSim 2.9的安装配置、基础功能操作和高级功能应用,帮助用户快速掌握这款强大的仿真平台。从系统要求检查到多体动力学仿真,再到性能优化技巧,全面解析AFSim 2.9的使用方法,适合初学者和进阶用户参考。

weixin_30892037的博客 569

Java链表-合并两个有序链表

定义一个新链表,定义一个新链表的指针tempNode。当合并的两个链表的头节点指针都不指向空时,比较两个链表节点的值,找到里面较小的值的地址。让新链表的指针tempNode下一个节点指向该最小值的地址,然后让该较小值的地址头指针指向下个地址。当一个链表的头指针指向空时,把另一个链表剩下的地址都填到新链表后边。这样链表就合并成功。...

m0_52012606的博客 4420

树莓派5新手必看:保姆级ibus中文输入法安装与配置全流程(含.bashrc设置避坑)

本文详细介绍了在树莓派5上安装和配置ibus中文输入法的完整流程,包括系统环境准备、ibus框架安装、图形界面配置及常见问题解决方案。通过清晰的步骤说明和避坑指南,帮助新手快速实现中文输入功能,提升开发效率。

weixin_29159441的博客 536

合并两个有序链表(Java)

解题思路: 第一步:先设置一个虚拟节点(傀儡节点) 图解: 完整代码如下:

m0_63036262的博客 5659

Altium Designer系列: 软件系统参数配置保存

【Altium Designer实践】 软件系统参数配置保存 作者 CodeAllen ,转载请注明出处 目录设置中文菜单高亮模式设置文件关联pcb设置布线设置保存配置文件(复用) 设置中文菜单 DXP->Preferences 高亮模式设置 文件关联 pcb设置 布线设置 保存配置文件(复用) ......

CodeAllen嵌入式 2019

⚡【C++要笑着学】(13) STL介绍:什么是STL标准模板库 | STL的版本 | 浅谈STL的缺陷

再讲解函数模板之前先对STL做一个小铺垫,本篇将对STL做一个简单的介绍。

有道无术, 术尚可求。有术无道, 止于术。 3037

Java版合并两个有序链表,合并后的链表依然保持顺序

java实现有序链表的合并,并对相同值进行了处理。文章包含思路分析、代码实现和运行结果,欢迎交流

wangye135的博客 1349

基于PPT的三维光路结构示意图绘制实例演示-技术细节

基于PPT的三维光路结构示意图绘制实例演示-技术细节

简单光学 7480

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

判断list1和list2哪一个头结点的值更小,然后递归决定下一个连接的值,有一个链表为空,则接另外一个链表节点。新链表是通过拼接给定的两个链表的所有节点组成的。定义一个新节点,用于指向两个链表节点比较中小的节点。指向next,如果是结构体变量则用。将两个升序链表合并为一个新的。如果是指针变量*则用。代码参考:力扣官方题解。

weixin_60836108的博客 1000

手把手教你学Simulink——基于Simulink的重复控制抑制周期性负载转矩扰动

传统的PI调节器在面对这类特定频率的周期性扰动时,会因积分器的相位滞后而导致转速出现明显的纹波(如6次、12次谐波),严重影响系统的控制精度和静音性能。:要在频率 fd​处获得较高的开环增益以抑制扰动,必须大幅增加PI的比例系数 Kp​,但这会牺牲系统的相位裕度,导致高频共振甚至系统失稳;:电机转速变化时,基频 fbase​会变,导致 6次谐波频率 6×fbase​也在变。设系统的采样周期为 Ts​,目标抑制的周期性扰动频率为 fd​(rad/s),则对应的周期采样点数 N=fd​Ts​2π​。

MHD0815的博客 256

信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算1(知识地图:同余、裴蜀定理、扩展欧几里得、乘法逆元、分数模运算)

信奥赛C++提高组csp-s之数论基础专题课:从同余到分数模运算1(知识地图:同余、裴蜀定理、扩展欧几里得、乘法逆元、分数模运算)

王老师青少年编程 792

《LeetCode力扣练习》第21题 合并两个有序链表 Java

《LeetCode力扣练习》第21题 合并两个有序链表 Java 一、资源 题目: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 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.

XRT_knives的博客 268

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode 21:合并两个有序链表(Java实现)

LeetCode 21:合并两个有序链表(Java实现) 题目 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems...

qq_45093368的博客 491

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LeetCode力扣每日一题(Java):21、合并两个有序链表

两个有序链表的合并已经是老生常谈的话题了,大家肯定并不陌生依次比较两链表结点的值,将值小的添加到新链表的末尾,并将指针后移(因为之前学C语言说说惯了指针,不知道在java中这种说法准不准确),若一个链表(设为L2)所有结点都被添加到新链表的结尾了,而另一个链表(设为L2)还有结点未添加,则L2中剩余的结点全部添加到新链表上,再将新链表返回。

lbcbjtlhmjq的博客 609

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LeetCode 21. 合并两个有序链表 java

LeetCode 21. 合并两个有序链表 java 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 : 输入:1-&gt;2-&gt;4, 1-&gt;3-&gt;4 输出:1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4 JAVA 代码: class Solution { public ListNode mergeTw...

lele的专栏 521

Java实现 LeetCode 21 合并两个有序链表

21. 合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-sorted-...

南 墙 1万+

力扣LeetCode:21. 合并两个有序链表(Python、Java)

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

乔卿的博客 2030

LeetCode力扣21.合并两个有序链表 Java

两种解法:递归和新建链表 新建一个链表: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this

qq_37832544的博客 261

力扣21.合并两个个有序链表(java)

力扣21.合并两个个有序链表题目思路代码 LeetCode笔记汇总 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 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 <=

k_surge的博客 576

Java题目详解——LeetCode21.合并两个有序链表

首先我们可以新建一个新链表,然后同时循环遍历list1和list2,因为他们是两条升序链表,所以在循环中可以通过比较这两条链表的结点元素的大小,将较小的尾插至新链表中,当其中一条链表遍历完时,将另一条链表剩下的结点全部接到新链表后面即可。将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输入:l1 = [1,2,4], l2 = [1,3,4]输入:l1 = [], l2 = [0]输入:l1 = [], l2 = []输出:[1,1,2,3,4,4]

lil_ghost_的博客 1051

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

LeetCode 21. 合并两个有序链表题目将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路思路1-迭代注意保留头结点用以返回;算法复杂度: n为两个链表的总长时间复杂度: $ {color{Magenta}{...

weixin_35698805的博客 120

leetcode hot100 之【LeetCode 21. 合并两个有序链表】 java实现

LeetCode 21. 合并两个有序链表

DataCrafter的博客 564

数据结构与算法|链表基础之力扣leetcode21合并两个有序链表(cpp、Java实现)

对于将两个升序链表合并的问题,以下是三种常见的解决方法:方法一:迭代法初始化一个新的链表,并设立一个指针指向新链表的头部。比较两个链表当前节点的值,将较小的节点添加到新链表中,并将指针移到下一个位置。重复步骤2,直到其中一个链表遍历完。将剩下的链表连接到新链表的后面。返回新链表的头部。方法二:递归法判断两个链表是否有一个为空,如果有,则返回另一个链表。比较两个链表当前节点的值,将较小的节点作为新链表的头节点。

染落林间色的博客 462

[LeetCode]21. 合并两个有序链表 (java实现)

[LeetCode]21. 合并两个有序链表 (java实现)1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 (java实现)) 1. 题目 2. 读题(需要重点注意的东西) 思路1:迭代,逐一比较l1的节点和l2的节点,小的加入到新的链表中,再往后走一步,再往后继续比较,直到某一方链表为null,将另一方剩余的节点全部加入到新的链表后。(类似于归并排序,容易理解但是有额外的节点开销)。 思路2:递归(理解困难但是开销较小),递归法

cloud的博客 279

LeetCode 21. 合并两个有序链表 链表合并 Java实现

这道题目考察了链表的基本操作,通过迭代和递归两种方法都能有效地合并两个有序链表。迭代法更适合处理链表较长的情况,而递归法则在代码上更加简洁。

Lentr0py的博客 978

【LeetCode力扣解题004】21.合并两个有序链表(Java 链表)含解答源码

题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 测试用例: 示例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 均按 非递减顺序

weixin_46013570的博客 983
上一篇: LeetCode155. 最小栈(java)
下一篇: LeetCode83. 删除排序链表中的重复元素(java)
inferno devil
博客等级 码龄9年 54粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值