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

leetcode 21.合并两个有序链表

时间:2024-08-18 11:06:05浏览次数:10  
标签:21 list1 next 链表 l2 l1 list2 leetcode

leetcode 21.合并两个有序链表

题目描述:

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

迭代法:

思路: 不断迭代,谁小指向谁

   public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        if (list1== null) {
            return list2;
        }
        if (list2== null) {
            return list1;
        }
        //虚拟节点/哨兵节点,后面会指向合并后的链表。可以更容易地返回合并后的链表
        ListNode prehead = new ListNode(-1);
        ListNode listNode = prehead;

        //遍历,谁小指向谁
        while (list1!=null && list2!=null) {
            if (list1.val < list2.val) {
                listNode.next = list1;
                //向后迭代
                list1 = list1.next;
            } else {
                listNode.next = list2;
                list2 = list2.next;
            }
            //向后迭代
            listNode = listNode.next;
        } 
        //一个链表遍历完了,另外一个链表还有未合并完的部分,也要合并进结果里面。
        if (list1 == null) {
            listNode.next = list2;    
        } else {
            listNode.next = list1;    
        }

        return prehead.next;
}

递归法

思路: 判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        } else if (l2 == null) {
            return l1;
        } else if (l1.val < l2.val) {
           //自顶向下。
           //由于 l1的节点值比较小,所以需要合并到结果集中。
           // l1指向的next 节点是合并后的节点,l1.next 和 l2 是下一次参与递归的节点
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        } else {
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }

标签:21,list1,next,链表,l2,l1,list2,leetcode
From: https://www.cnblogs.com/expiator/p/18365390

相关文章

  • leetcode3.无重复字符的最长子串
    题目:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。思路:滑动窗口算法。最大子串长度=右下标-左下标+1;使用map记录字符的下标,key为字符,value为下标。如果map的key出现重复,说明有重复字符了。找出左下标left,如果重复就刷新左下标。代码:publ......
  • 一本通1215:迷宫答案
    #include<bits/stdc++.h>usingnamespacestd;charmp[105][105];boolvis[105][105];intdx[4]={0,0,1,-1};intdy[4]={-1,1,0,0};intfx,fy,sx,sy,n,c,a=0;voiddfs(intx,inty){  if(x==fx&&y==fy)  {    cout<<"YES"&l......
  • 721java jsp SSM办公管理系统通讯录考勤打卡日程信息管理(源码+文档+PPT+开题+任务书+
    项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/10......
  • 【数据结构】详细剖析链表,带你实现单链表,双向链表,附链表编程练习题
    目录一.链表1.链表的概念及结构2.单链表的实现2.1单链表节点结构2.2动态申请一个节点2.3单链表打印2.4单链表尾插2.5单链表头插2.6单链表尾删2.7单链表头删2.8单链表查找 2.9单链表在pos后一位插入x2.10单链表删除pos后一位的值2.11单链表销毁 ......
  • 知识改变命运 数据结构【链表面试题】
    1.删除链表中等于给定值val的所有节点。OJ链接publicListNoderemoveElements(ListNodehead,intval){if(head==null){returnnull;}ListNodecur=head.next;ListNodepre=head;while(cur!=null){......
  • 数据结构----链表
    一丶概念     链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。      和顺序表不同同,使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。二丶特点     特点:内存不连续,通过指针进行连接 ......
  • [考试记录] 2024.8.17 csp-s模拟赛21
    T1Set解析思考+组合题场上只能想到暴力01背包再加上bitset优化,很好打。本应该有60pts(?或者更多),不曾想由于spj的一些未知原因喜提systemerror,全部cancelled。喜提0pts。......
  • 双向链表 尾节点插入
    importlombok.Data;publicclassT{publicstaticvoidmain(String[]args){DoubleLinkedListlist=newDoubleLinkedList();list.addTail(1);list.addTail(2);list.addTail(3);System.out.println("......
  • 安装IDEA2021.2.1(含安装包)及其扩展设置
    一、下载通过百度网盘分享的文件:ideaIU-2021.2.1.exe链接:https://pan.baidu.com/s/1cCUHNm0dpWlfkxf5RCEgfw 提取码:v62e 二、安装 安装视频网址:Java基础概念-12-idea的概述和下载安装_哔哩哔哩_bilibili三、idea中的第一个代码 如何该类名四、扩展设置......
  • 【漫谈C语言和嵌入式007】AD2S1210简介与应用:高精度旋转变压器到数字转换器的解析
            在精密运动控制和测量系统中,旋转变压器(Resolver)是一种常用的传感器,能够精确检测旋转轴的位置和速度。为了将旋转变压器的模拟信号转换为数字信号,便于微控制器或DSP进行处理,AD2S1210作为一款高性能的旋转变压器到数字转换器(RDC),为工程师提供了高精度、低延迟的......