剑指 Offer 25. 合并两个排序的链表

2023-11-08

合并两个排序的链表

思路

在这里插入图片描述

题解

package swordPointingToTheOffer;

//public class ListNode {
//    int val;
//    ListNode next;
//    ListNode(int x) { val = x; }
//}

public class TwentyFive {

    public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode perHead = new ListNode(0);
        ListNode move = perHead;
        boolean isFirst = true;
        while (l1!=null&&l2!=null){
            if(l1.val>l2.val){
                ListNode temp = new ListNode(l2.val);
                move.next = temp;
                move = move.next;
                l2=l2.next;
            }else {
                ListNode temp = new ListNode(l1.val);
                move.next=  temp;
                move = move.next;
                l1 = l1.next;
            }
        }
        if(l1==null){
            move.next = l2;
        }else if(l2==null){
            move.next = l1;
        }

        return perHead.next;
    }

    public static void main(String[] args) {
        ListNode listNode11 = new ListNode(1);
        ListNode listNode12 = new ListNode(3);
        ListNode listNode13 = new ListNode(5);
        ListNode listNode14 = new ListNode(7);
        listNode11.next = listNode12;
        listNode12.next = listNode13;
        listNode13.next = listNode14;


        ListNode listNode21 = new ListNode(2);
        ListNode listNode22 = new ListNode(4);
        ListNode listNode23 = new ListNode(6);
        ListNode listNode24 = new ListNode(8);
        listNode21.next = listNode22;
        listNode22.next = listNode23;
        listNode23.next = listNode24;

        ListNode res = mergeTwoLists(listNode11,listNode21);
        while (res!=null){
            System.out.println(res.val);
            res = res.next;
        }
    }
}

在这里插入图片描述

优化内存空间

新链表其实不用每次新建节点,让指针指向两链表中的值就行。。

package swordPointingToTheOffer;

//public class ListNode {
//    int val;
//    ListNode next;
//    ListNode(int x) { val = x; }
//}

public class TwentyFive {

    //其实不用每次新建节点,代码如下
    public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) {
        ListNode merge = new ListNode(0);
        ListNode temp = merge;

        while (l1!=null && l2!=null){
            if(l1.val< l2.val){
                //直接指向l1链表中的节点
                temp.next = l1;
                l1 = l1.next;
            }else {
                //直接指向l2链表中的节点
                temp.next = l2;
                l2 = l2.next;
            }
            //工作指针后移
            temp = temp.next;
        }
        //最后把尾部的添加
        if(l1==null){
            temp.next = l2;
        }else if(l2==null){
            temp.next = l1;
        }

        return merge.next;
    }



    public static void main(String[] args) {
        ListNode listNode11 = new ListNode(1);
        ListNode listNode12 = new ListNode(3);
        ListNode listNode13 = new ListNode(5);
        ListNode listNode14 = new ListNode(7);
        listNode11.next = listNode12;
        listNode12.next = listNode13;
        listNode13.next = listNode14;


        ListNode listNode21 = new ListNode(2);
        ListNode listNode22 = new ListNode(4);
        ListNode listNode23 = new ListNode(6);
        ListNode listNode24 = new ListNode(8);
        listNode21.next = listNode22;
        listNode22.next = listNode23;
        listNode23.next = listNode24;

        ListNode res = mergeTwoLists2(listNode11,listNode21);
        while (res!=null){
            System.out.println(res.val);
            res = res.next;
        }
    }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指 Offer 25. 合并两个排序的链表 的相关文章

  • Windows下基于WSL2的Ubuntu开发环境搭建

    1 背景介绍 Windows是市场占有率最高的桌面操作系统 嵌入式开发领域一般需要搭建ubuntu虚拟机环境以实现linux下的交叉编译等工作 传统的Vmvare Ubuntu虚拟机安装过程繁琐且资源消耗巨大 自从Windows提供WSL2
  • 数据分析08——Pandas中对数据进行数据清洗

    0 前言 使用pandas修改数据是否会改变源数据 Pandas 对 DataFrame 的操作通常是针对原始数据本身而不是其副本的 例如 当我们使用 loc 或 iloc 方法选择 DataFrame 中的某行或某列并进行修改时 实际上是
  • python实现手势识别

    python实现手势识别 入门 使用open cv实现简单的手势识别 刚刚接触python不久 看到了很多有意思的项目 尤其时关于计算机视觉的 网上搜到了一些关于手势处理的实验 我在这儿简单的实现一下 PS 和那些大佬比起来真的是差远了 毕
  • Flink Sql使用mysql-cdc捕获多个表失败的问题

    问题描述 要捕获同一个库里的多个表的binlog 程序不报错 但是修改某个表后没有结果没有任何改变 fllinkSql的with语句 WITH connector mysql cdc hostname s port s username s
  • Linux安装anaconda3是否初始化的区别

    Linux安装anaconda3提示是否希望安装程序通过运行conda init来初始化Anaconda3 Do you wish the installer to initialize Anaconda3 by running conda
  • 数据结构1.1.1单链表的实现

    1 初始化链表节点内容 typedef struct char isbn 20 char name 10 double price Book typedef struct list Book date struct list next Li
  • GIT——! [rejected] master -> master (non-fast-forward)

    问题 rejected master gt master non fast forward error failed to push some refs to ssh 192 168 137 64 29418 51Selling git h
  • Maven的安装与使用

    一 简介 1 什么是Maven Maven翻译为 专家 内行 的意思 是著名Apache公司下基于Java开发的开源项目 Maven项目对象模型 POM 是一个项目管理工具软件 可以通过简短的中央信息描述来管理项目的搭建 报告和文档等步骤
  • JS+AES解密(CBC模式、输出HEX)

    if tokenMsgs const response await getMqttMsgService let mqttMsg response data msg state mqttconfigs mqttMsg const aesKey

随机推荐

  • 【工具类】发送邮件表格html生成类

    发送邮件的时候 有时候要自己拼html画一个表格 嫌麻烦就写了个工具类 核心类MailTableBuilder import java util MailTableCell author zgd date 2022 8 25 17 43 p
  • 【JAVA】垃圾回收详解

    文章目录 垃圾回收 调用垃圾回收器的方法 finalize 方法 判断对象是否可回收 引用计数算法 根搜索算法 引用的分类 垃圾回收算法 标记 清除算法 标记 整理算法 复制算法 分代收集算法 分配内存与回收策略 Minor GC 和 Fu
  • 使用UDP实现下载上传

    include
  • python基础知识点汇总

    本文包括python基本知识 简单数据结构 数据结构类型 可变 列表 字典 集合 不可变 数值类型 字符串 元组 分支循环和控制流程 类和函数 文件处理和异常等等 python控制语句 if语句 当条件成立时运行语句块 经常与else el
  • 纯js原生实现图片批量下载

    前端纯js实现图片批量下载到本地 图片转base64 getImageBase64 image const canvas document createElement canvas canvas width image width canv
  • 4行Python代码打败美图秀秀

    我们平时使用一些图像处理软件时 经常会看到其对图像的亮度 对比度 色度或者锐度进行调整 你是不是觉得这种技术的底 层实现很高大上 其实最基础的实现原理 用 Python 实现只需要几行代码 学会后你也可以进行简单的图像增强处理了 图像增强哪
  • wsl 内突然不能上网了

    现象 1 一开始是间歇性无法联网 无法连接外网 表现为 apt get update 时请求失败 国内源 2 尝试 ping www baidu com等外网域名 超时 nslookup能够正常解析域名 IP 在 host 主机上也能够正常
  • 进程和线程:进程的开销比线程大在了哪里?

    进程和线程 进程 Process 顾名思义就是正在执行的应用程序 是软件的执行副本 而线程是轻量级的进程 进程是分配资源的基础单位 线程很长一段时间被称作轻量级进程 Light Weighted Process 是程序执行的基本单位 在计算
  • pyltp安装教程windows11

    我是用anaconda创建一个环境 这个比较容易管理 第一步 anaconda创建环境 网上很多教程 第二步 安装pyltp 第一种方法 pip install pyltp 用这个多半失败 第二种方法 用wheel安装 下载wheel 参考
  • 使用 CUBLAS 库给矩阵运算提速

    前言 编写 CUDA 程序真心不是个简单的事儿 调试也不方便 很费时 那么有没有一些现成的 CUDA 库来调用呢 答案是有的 如 CUBLAS 就是 CUDA 专门用来解决线性代数运算的库 本文将大致介绍如何使用 CUBLAS 库 同时演示
  • python项目构建_通过构建4个项目来学习Python网络

    python项目构建 The Python programming language is very capable when it comes to networking We ve released a crash course on
  • [JavaWeb]完美解决IDEA(2022)新建没有Servlet选项(无法访问Servlet 404问题)

    IntelIJ IDEA在2022版本中更新和2021版本界面差距还是比较大的 你们是否有遇到过以下问题呢 右键包没有新建Servlet的选项 WebServlet 404 web xml配置映射时
  • cross gcc linux gcc 区别,深入理解交叉编译(Cross Compile)

    深入理解交叉编译 Cross Compile 首先你要了解一下 三个名词 build haost target 和三元组 build 构建 gcc 编译器的平台系统环境 编译该软件使用的平台 host 是执行 gcc 编译器的平台系统环境
  • SVO、vinsmono、 OKVIS系统比较

    几个经典视觉slam系统的比较 SVO 高翔链接 https www zhihu com question 39904950 answer 138644975 处理的各个线程 tracking部分 frame to frame frame
  • 基础算法题——斐波那契(快速求幂、斐波那契特性、矩阵)

    基础算法题 斐波那契 做题心得 这道算法题花了我几乎一天的时间才弄懂 不得不说我还是太菜了 该算法题主要考查了对斐波那契数列的理解 矩阵与斐波那契结合 快速求幂 在看了数篇博客后我才慢慢对矩阵 快速求幂有所了解 由于是初步接触这类题型 如果
  • unity 获取网络时间

    网络时间 using System using System Collections using System Collections Generic using UnityEngine using UnityEngine Networki
  • C++ 逗号运算符

    逗号运算符 comma operator 含有两个运算对象 按照从左向右的顺序依次求值 对于逗号运算符来说 首先对左侧的表达式求值 然后将求值结果丢弃掉 逗号运算符真正的结果是右侧表达式的值 如果右侧运算对象是左值 那么最终的求值结果也是左
  • 大数据FLINK实时数仓项目实战

    一 FLINK实时数仓项目简介 1 普通实时计算与实时数仓比较 普通的实时计算优先考虑时效性 所以从数据源采集经过实时计算直接得到结果 如此做时效性更好 但是弊端是由于计算过程中的中间结果没有沉淀下来 所以当面对大量实时需求的时候 计算的复
  • 串口通信(RS232的C程序)

    Bioscom使用注意 串口接线方式为4 6 7 8分别短接 仅此函数要求 否则会造成只能接受无法发送数据 函数返回值错误 函数名 bioscom 功 能 操作port指定的RS232异步通讯口 用 法 int bioscom int cm
  • 剑指 Offer 25. 合并两个排序的链表

    合并两个排序的链表 思路 题解 package swordPointingToTheOffer public class ListNode int val ListNode next ListNode int x val x public