后端开发刷题 | 合并两个排序的链表

news2024/12/28 22:01:40

描述

输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。

数据范围: 0≤n≤1000,−1000≤节点值≤1000

如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:

或输入{-1,2,4},{1,3,4}时,合并后的链表为{-1,1,2,3,4,4},所以对应的输出为{-1,1,2,3,4,4},转换过程如下图所示:

示例1

输入:

{1,3,5},{2,4,6}

返回值:

{1,2,3,4,5,6}

示例2

输入:

{},{}

返回值:

{}

示例3

输入:

{-1,2,4},{1,3,4}

返回值:

{-1,1,2,3,4,4}

思路分析:

方法一:

使用递归来进行求解

  • 终止条件:两链表其中一个为空时,返回另一个链表;
  • 当前递归内容:若pHead1.val <= pHead2.val 将较小的pHead1.next与merge后的表头连接,即pHead1.next = Merge(pHead1.next,pHead2); pHead2.val较大时同理;
  • 每次的返回值:排序好的链表头;

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

代码:

import java.util.*;


public class Solution {
    /**
     * 
     * @param pHead1 ListNode类 
     * @param pHead2 ListNode类 
     * @return ListNode类
     */
    public ListNode Merge (ListNode pHead1, ListNode pHead2) {
        if(pHead1==null){
            return pHead2;
        }
        if(pHead2==null){
            return pHead1;
        }

        if(pHead1.val>pHead2.val){
            pHead2.next=Merge(pHead1,pHead2.next);
            return pHead2;
        }else{
            pHead1.next=Merge(pHead1.next,pHead2);
            return pHead1;
        }
    }
}

方法二:

空间O(1)的思路:

  • 创建一个虚拟结点和一个哨兵结点

  • 当pHead1与pHead2都不为null时循环

  • 哪个的val小哪个赋给虚拟结点的next,虚拟结点后移。

  • 退出循环后,哪个pHead不为空,哪个结点(包括剩下的)给虚拟结点的next

  • 最后返回哨兵结点的next

代码:

import java.util.*;


public class Solution {
    /**
     * 
     * @param pHead1 ListNode类 
     * @param pHead2 ListNode类 
     * @return ListNode类
     */
    public ListNode Merge (ListNode pHead1, ListNode pHead2) {
        ListNode dummy=new ListNode(-1);
        ListNode res=dummy;

        while(pHead1!=null&&pHead2!=null){
            if(pHead1.val>pHead2.val){
                dummy.next=pHead2;
                pHead2=pHead2.next;
                dummy=dummy.next;
            }else if(pHead1.val<=pHead2.val){
                dummy.next=pHead1;
                pHead1=pHead1.next;
                dummy=dummy.next;

            }
        }
        if(pHead1!=null){
            dummy.next=pHead1;
        }
        if(pHead2!=null){
            dummy.next=pHead2;
        }
        return res.next;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python入门基础知识! 新手必备,看完技术突飞猛进!

基本的类 python最基础、最常用的类主要有int整形&#xff0c;float浮点型&#xff0c;str字符串&#xff0c;list列表&#xff0c;dict字典&#xff0c;set集合&#xff0c;tuple元组等等。int整形、float浮点型一般用于给变量赋值&#xff0c;tuple元组属于不可变对象&#x…

Nginx源码安装与进阶负载均衡

目录 一 web服务介绍 二 Nginx介绍与源码安装 2.1 nginx源码安装 2.2 平滑升级和回滚 三 配置文件详解 3.1 配置文件说明 3.2 全局配置与http模块 3.3 root与alias 3.4 location的介绍 3.5 账户认证 四 高级配置 4.1 nginx 压缩功能 4.2 变量介绍 五 nginx反向代…

【Android】adb devices 出现devices offline的问题

1 问题 adb devices 出现devices offline 2 解决方法 adb kill-serveradb start-server 然后&#xff0c;adb devices查看。 adb devices 问题解决啦。。。&#x1f49b; &#x1f499; &#x1f49c; ❤️ &#x1f49a; &#x1f49b; &#x1f499; &#x1f49c; ❤️…

韩顺平Java-第二十四章:MYSQL基础篇

一 数据库 1 数据库简单原理图 2 使用命令行窗口连接MYSQL数据库 &#xff08;1&#xff09;mysql -h 主机名 -P 端口 -u 用户名 -p密码&#xff1b; &#xff08;2&#xff09;登录前&#xff0c;保证服务启动。 3 MySQL三层结构 &#xff08;1&#xff09;所谓安装MySQL数…

第三期书生大模型实战营 第4关 Llamaindex RAG实践

前置知识 正式介绍检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术以前&#xff0c;大家不妨想想为什么会出现这样一个技术。 给模型注入新知识的方式&#xff0c;可以简单分为两种方式&#xff0c;一种是内部的&#xff0c;即更新模…

ES6笔记总结(Xmind格式):第一天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; es6知识总结&#xff1a; 新增语法&#xff1a; 1.let声明变量的特点&#xff1a; ①let 没有变量提升 ②在同一作用域下let的变量不能重复声明 ③let声明的变量存在块级作用域 2.const声明…

仿真软件的功能有哪些?仿真软件助力科研与工程领域

仿真软件是一种强大的工具&#xff0c;可以帮助工程师和科学家在虚拟环境中模拟和分析各种现象和系统。它们具有广泛的应用领域&#xff0c;包括工程设计、科学研究、产品开发和决策支持等。 随着科技的飞速发展&#xff0c;仿真软件已成为科研与工程领域中不可或缺的工具。本文…

“2025深圳电子信息展”带您感受科技创新如何改变世界

深圳&#xff0c;这座位于中国南海之滨的城市&#xff0c;自改革开放以来&#xff0c;便以惊人的速度崛起&#xff0c;成为了全球瞩目的经济特区与创新高地。被誉为“中国的硅谷”&#xff0c;深圳不仅是中国科技创新的重要引擎&#xff0c;更是高新技术产业的璀璨明珠&#xf…

洗衣行业在线预约小程序源码系统 源码可二次开发 带源代码包以及搭建部署教程

系统概述 在快节奏的现代生活中&#xff0c;时间成为了人们最宝贵的资源之一。随着科技的飞速发展&#xff0c;各行各业都在积极探索数字化转型&#xff0c;以提升服务效率与用户体验。洗衣行业&#xff0c;作为日常生活中不可或缺的服务领域&#xff0c;也不例外。今天&#…

记一次 SAP BP 编号范围错误引发的一个问题 GET_NRIV_LINE

本来想着循着错误提示去排查&#xff0c;但是还是想看看业务发生了什么&#xff0c;他们的操作是否有问题&#xff0c;不经意间发现 号码段是有问题的&#xff0c;由此大概可以判断是他们编号范围和类型之间的问题 角色和分组是否一致的&#xff0c;如果不一致就发生了以上错误…

roles及项目搭建(thirty-two day)

回顾&#xff1a; playbook 1、调用剧本 ansible-playbook /etc/ansible/playbook/book001.yml 2、编写剧本 --- - hosts: s1remote_user: roottasks:- name: 卸载httpdyum: namehttpd stateabsent- name: 安装nginxyum: namenginx …

知识付费小程序的优势

1. 便捷性&#xff1a;用户可以随时随地通过手机访问小程序&#xff0c;获取所需的知识内容&#xff0c;不受时间和空间的限制。 2. 精准定位&#xff1a;能够根据用户的兴趣、需求和行为数据&#xff0c;为其精准推送符合其需求的知识产品&#xff0c;提高用户满意度和购买转化…

最新专业版Python+PyCharm安装保姆级教程(附安装包+永久插件码)

想入门学习python&#xff0c;那么你的python和pycharm安装好是第一步&#xff01;&#xff01;&#xff01;今天小编详细讲一下安装教程 如果你正准备入门Python并且找不到方向和学习路线的话可以试试我这一份学习方法&#xff0b;籽料呀&#xff01; 点击 领取&#xff08;无…

[数据集][目标检测]集装箱缺陷检测数据集VOC+YOLO格式4127张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4127 标注数量(xml文件个数)&#xff1a;4127 标注数量(txt文件个数)&#xff1a;4127 标注…

STM32(F429) DAC 详解与应用实例

目录 前言 一、DAC 概述 1.主要特点 2.工作原理 3.DAC通道框图 二、DAC 的配置与使用 1.硬件连接 2.软件配置 3.应用实例&#xff1a;模拟电压输出 三、DAC 的高级应用 1.三角波的生成 2.噪音生成 四、DAC 的应用注意事项 1.参考电压选择 2.输出负载能力 3.噪声…

pulsar官方文档学习记录——pulsasr事务

pulsar事务 之前pulsar消息机制&#xff0c;和架构概览作为一个后端搬砖的需要了解的也差不多了。再补充个pulsar事务 因为exactly-once语义应用场景很多 pulsar事务可以能使流应用程序能够在一个原子操作中 &#xff0c;消费、处理消息&#xff0c;生成消息。 需要事务的原…

JS高级类型存储方式——含堆/栈分析

1、内存 在编写正式内容前&#xff0c;首先需要弄清楚的一个概念就是&#xff1a;内存 内存 &#xff1a;也就是电脑中的硬件 &#xff0c;内存越大&#xff0c;可以同时开启的程序就越多内存的作用&#xff1a; 存储运行中的代码&#xff0c;把代码执行过程中所需要的数据&…

Halcon20.11深度学习目标检测模型

1.前言&#xff1a;.Halcon的深度学习标注工具一直在更新&#xff0c;我下载的20.11版本的Deep Learning Tool已经显示过期&#xff0c;无奈只能下载最新版MVTec Deep Learning Tool 24.05。不过最新版的标注工具做的很人性化&#xff0c;分类&#xff0c;目标检测&#xff0c;…

化挑战为机遇,联想凌拓迎来杨旭时代

【全球存储观察 &#xff5c; 科技热点关注】 2024年7月&#xff0c;联想凌拓CEO杨旭上任&#xff0c;引发业界广泛关注&#xff0c;成为国内数据存储领域的新闻焦点。 现在&#xff0c;联想凌拓迎来了杨旭时代。作为联想凌拓CEO&#xff0c;杨旭的到任给联想凌拓带来了怎样的…

又有不少人要为《黑神话:悟空》买电脑了

1. 什么是 3A 游戏&#xff1f;2. 《黑神话:悟空》是一款怎样的游戏&#xff1f;3. 又有不少人要为《黑神话:悟空》买电脑了 3.1. 《黑神话:悟空》对电脑性能的要求3.2. 性能测试工具 不管你是游戏玩家还是非游戏玩家&#xff0c;这两天肯定被“黑悟空”刷屏了。 因为就在昨…