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

LeetCode21 合并两个有序链表

时间:2024-11-27 15:59:09浏览次数:5  
标签:ListNode cur list1 next 链表 有序 list2 LeetCode21

LeetCode21 合并两个有序链表

题目链接:LeetCode21

描述

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

示例

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

思路

方法一:迭代

遍历两个列表,逐一比较

时间复杂度:O(n+m)

空间复杂度:O(1)

方法二:递归

时间复杂度:O(n+m)

空间复杂度:O(n+m)

代码

方法一:

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode dummy = new ListNode(-1);
        ListNode cur = dummy;
        while(list1!=null && list2!=null){
            if(list1.val < list2.val){
                cur.next = list1;
                list1 = list1.next;
            }else{
                cur.next = list2;
                list2 = list2.next;
            }
            cur = cur.next;
        }
        if(list1 == null){
            cur.next = list2;
        }
        if(list2 == null){
            cur.next = list1;
        }
        return dummy.next;
    }
}

方法二:

class Solution {
    public ListNode mergeTwoLists(ListNode list1, 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;
        }
    }
}

标签:ListNode,cur,list1,next,链表,有序,list2,LeetCode21
From: https://www.cnblogs.com/dwhere/p/18572472

相关文章

  • 【快慢指针技巧】:高效解决链表和数组问题(26,83,27)
    ......
  • 24. 两辆交换链表中的节点
    题目卡哥的讲解很详细了卡哥视频讲解一如既往的把小细节都讲到了跟着卡哥的代码敲了下/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val......
  • LeetCode234 回文链表
    LeetCode234回文链表题目链接:LeetCode描述给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例输入:head=[1,2,2,1]输出:true输入:head=[1,2]输出:false方法一思路首先找到链表的中间结点mid:如果链表有奇数个节......
  • C进阶 结构体与链表
    文章目录一,回顾一点结构体与指针二,结构体怎么与链表联系在一起三,链表的头插法和尾插法四,删除特定的节点和插入特定的节点(虚拟头结点实现)前言这里讲述的是链表与结构体的关系,把两个联系在一起可以很好的把杂乱的数据通过链表联系在一起,这样可以更加便利去修改数据和维护......
  • Swift 实现链表重新排列:L0 → Ln → L1 → Ln-1
    前言本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。143.重排链表不积跬步,无以至千里;不积小流,无以成江海,Swift社区伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。难度水平:中等摘要链表的重新排列是链表操作的......
  • 【数据结构】双向链表、单向循环链表、双向循环链表、栈、链栈
    目录一、双向链表定义类和封装函数以及测试样例如下:注意事项:二、循环链表单循环列表的类和函数封装如下:注意事项: 三、双向循环链表结点类和双循环链表的定义部分函数封装之判空和尾插双循环链表遍历双循环链表尾删完整测试以及结果:四、栈顺序栈顺序栈本质以及......
  • LeetCode24 两两交换链表中的节点
    LeetCode24两两交换链表中的节点题目链接:LeetCode24描述给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例输入:head=[1,2,3,4]输出:[2,1,4,3]思路代码classSolution{publicListNodeswapPairs(ListNodehead){ListNodedummy=......
  • 206. 反转链表
    题目自己一开始的思路是对链表的每个节点的val进行更改,然后就没有然后了……没写出来然后看了卡哥的讲解感触最深的点是卡哥是让结点间的指向发生改变(换句话说,改变了节点的next),然后顺着这个思路卡哥给出了两个方法:双指针法和递归法。特别要给卡哥的视频讲解点个大大的赞,所有......
  • 数据结构第二章双链表的相关操作
    带头结点的双链表的实现以及一系列操作#include<stdio.h>#include<stdlib.h>//定义双链表节点结构体typedefstructDNode{intdata;structDNode*prior;structDNode*next;}DNode,*DLinkList;//初始化双链表voidInitList(DLinkList&L){......
  • LeetCode19 删除链表的倒数第 N 个结点
    LeetCode19删除链表的倒数第N个结点题目链接:LeetCode19描述给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]思路定义fast指针和slow指针,初始值为虚拟头结点fast首先走n+1步fast和slow同时移动,直......