合并2个排序的链表

news2025/2/2 6:13:32

合并2个排序的链表

递归解法和迭代解法

/**
 * 节点实体类
 */
class ListNode {
    public int val;
    public String name;
    public ListNode next;

    public ListNode(int val) {
        this.val = val;
    }
}

/**
 * 链表节点类
 */
class Node {

    // next存的是下个节点的引用
    Node next;

    // 值
    int val;

    //为赋值操作的 构造单链表
    public Node(int val) {
        this.val = val;
    }
}

/**
 * 递归法
 * @param list1  看原链表是升序还是降序  生序出来就是从小到大
 * @param list2
 * @return
 */
public static ListNode Merge(ListNode list1, ListNode list2) {

    // list1 list2为空的情况
    if (list1 == null || list2 == null) {
        return list1 != null ? list1 : list2;
    }
    // 两个链表元素依次对比 一开始的list1.val就是第一个  递归出来的条件:l1=null || l2=null 往上返回值了
    if (list1.val <= list2.val) {
        // 递归计算 list1.next, list2
        list1.next = Merge(list1.next, list2);  //确定1个小之后 需要将list1.next和list2进行递归  往上出来的时候 5 的话 上面节点是4
        return list1;  //从小到大
    } else {
        // 递归计算 list1, list2.next
        list2.next = Merge(list1, list2.next);   // list1就是上面去除掉 前一个节点的
        return list2;
    }
}

/**
* 第二种不是递归的 迭代法
*/
public static Node merge(Node node1, Node node2) {
if (node1 == null) {
return node2;
}
if (node2 == null) {
return node1;
}
//伪造节点 0 null 最终将合并的链表放到null的位置
Node head = new Node(0);
Node cur = head; //2个指向同一个地址 改变其中一个地址的值 另一个输出时相应改变
//有一个是null 就不进来
while (node1 != null && node2 != null) {
if (node1.val <= node2.val) {
//cur是中间作用 连接链表
cur.next = node1;
//移动取值的指针 单个链表自己移动指针 单个链表自己移动指针循环
node1 = node1.next;
}else{
cur.next = node2;
node2 = node2.next;
}
}
if (node1 == null) {
cur.next = node2;
}
// 哪个为空 循环完了 连接另一个
if (node2 == null) {
cur.next = node1;
}
return head.next;
}

编写测试类,合并2个链表 ,由小到大顺序排列

public class Test {
    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        ListNode listNode6 = new ListNode(6);
        //第一个链表
        listNode1.next = listNode3;
        listNode3.next = listNode5;
        //第二个链表
        listNode2.next = listNode4;
        listNode4.next = listNode6;
        ListNode merge = solution.Merge(listNode1, listNode2);
        System.out.println(merge);

    }

}

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

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

相关文章

linux设置mysql远程连接

首先保证服务器开放了mysql的端口 然后输入 mysql -u root -p 输入密码后即可进入mysql 然后再 use mysql; select user,host from user; update user set host"%" where user"root"; flush privileges; 再执行 select user,host from user; 即可看到变…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中&#xff0c;向 addConstr 这个方法中传入一个 TempConstr 对象&#xff0c;在模型中就会根据这个对象生成一个约束。更重要的是&#xff1a;TempConstr 对象可以传给所有addConstr系列方法&#xff0c;所以下面先介绍 TempConstr 对象 TempConstr TempC…

【linux网络(4)】传输层协议详解(上)

目录 前言1. UDP协议报文详解2. TCP协议的报文格式3. TCP的确认应答机制4. TCP的连接管理机制1. TCP三次握手的过程2. TCP四次挥手的过程 5. 总结 前言 上一篇文章介绍了应用层中最重要的http协议&#xff0c;本篇文章将讲解传输层的两个协议: TCP和UDP. 由于UDP是一种简洁的协…

【esp32-uniapp】uniapp小程序篇02——引入组件库

一、引入组件库&#xff08;可自行选择其他组件库&#xff09; 接下来介绍colorUI、uview plus的安装&#xff0c;其他的安装可自行查找教程 1.colorUI weilanwl/coloruicss: 鲜亮的高饱和色彩&#xff0c;专注视觉的小程序组件库 下载之后解压&#xff0c;将\coloruicss-ma…

【机器学习】自定义数据集,使用scikit-learn 中K均值包 进行聚类

一、K 均值算法简介 K 均值算法的目标是将数据集划分为 K 个簇&#xff0c;使得每个数据点属于离它最近的簇中心&#xff08;centroid&#xff09;所代表的簇。 K均值聚类算法步骤 ① 初始化&#xff1a; 随机选择原始数据的K个数据点作为初始质心&#xff08;聚类中心&…

进阶数据结构——高精度运算

目录 前言一、高精度运算的定义与背景二、高精度运算的实现方式三、高精度运算的算法实现四、高精度运算的应用场景五、代码模版&#xff08;c&#xff09;六、经典例题1.[高精度加法](https://www.lanqiao.cn/problems/1516/learning/?page1&first_category_id1&name…

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对…

用 JavaScript 打造交互式表格:添加与删除行功能

前言 在网页开发中&#xff0c;创建交互式表格是很常见的。今天我们通过一个示例&#xff0c;来展示如何使用 HTML、CSS 和 JavaScript 实现一个能够动态添加和删除行的表格&#xff0c;并详细解释其中 JavaScript 部分的代码逻辑。 功能展示 初始状态&#xff1a;页面加载后…

Linux02——Linux的基本命令

目录 ls 常用选项及功能 综合示例 注意事项 cd和pwd命令 cd命令 pwd命令 相对路径、绝对路径和特殊路径符 特殊路径符号 mkdir命令 1. 功能与基本用法 2. 示例 3. 语法与参数 4. -p选项 touch-cat-more命令 1. touch命令 2. cat命令 3. more命令 cp-mv-rm命…

服务器虚拟化实战:架构、技术与最佳实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 服务器虚拟化是现代 IT 基础设施的重要组成部分&#xff0c;通过虚拟化技术可以提高服务器资源利用率、降低硬件成本&am…

AI大模型开发原理篇-1:语言模型雏形之N-Gram模型

N-Gram模型概念 N-Gram模型是一种基于统计的语言模型&#xff0c;用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说&#xff0c;N-Gram模型通过将文本切分为长度为N的词序列来进行建模。 注意&#xff1a;这…

Python从零构建macOS状态栏应用(仿ollama)并集成AI同款流式聊天 API 服务(含打包为独立应用)

在本教程中,我们将一步步构建一个 macOS 状态栏应用程序,并集成一个 Flask 服务器,提供流式响应的 API 服务。 如果你手中正好持有一台 MacBook Pro,又怀揣着搭建 AI 聊天服务的想法,却不知从何处迈出第一步,那么这篇文章绝对是你的及时雨。 最终,我们将实现以下功能: …

leetcode 2080. 区间内查询数字的频率

题目如下 数据范围 示例 这题十分有意思一开始我想对每个子数组排序二分结果超时了。 转换思路&#xff1a;我们可以提前把每个数字出现的位置先记录下来形成集合&#xff0c; 然后拿着left和right利用二分查找看看left和right是不是在集合里然后做一个相减就出答案了。通过…

深入了解 SSRF 漏洞:原理、条件、危害

目录 前言 SSRF 原理 漏洞产生原因 产生条件 使用协议 使用函数 漏洞影响 防御措施 结语 前言 本文将深入剖析 SSRF&#xff08;服务端请求伪造&#xff09;漏洞&#xff0c;从原理、产生原因、条件、影响&#xff0c;到防御措施&#xff0c;为你全面梳理相关知识&am…

11.QT控件:输入类控件

1. Line Edit(单行输入框) QLineEdit表示单行输入框&#xff0c;用来输入一段文本&#xff0c;但是不能换行。 核心属性&#xff1a; 核心信号&#xff1a; 2. Text Edit(多行输入框) QTextEdit表示多行输入框&#xff0c;也是一个富文本 & markdown编辑器。并且能在内容超…

Cesium+Vue3教程(011):打造数字城市

文章目录 Cesium打造数字城市创建项目加载地球设置底图设置摄像头查看具体位置和方向添加纽约建筑模型并设置样式添加纽约建筑模型设置样式划分城市区域并着色地图标记显示与实现实现飞机巡城完整项目下载Cesium打造数字城市 创建项目 使用vite创建vue3项目: pnpm create v…

Windows系统本地部署deepseek 更改目录

本地部署deepseek 无论是mac还是windows系统本地部署deepseek或者其他模型的命令和步骤是一样的。 可以看: 本地部署deepsek 无论是ollama还是部署LLM时候都默认是系统磁盘&#xff0c;对于Windows系统&#xff0c;我们一般不把应用放到系统盘&#xff08;C:&#xff09;而是…

基于Python的药物相互作用预测模型AI构建与优化(下.代码部分)

四、特征工程 4.1 分子描述符计算 分子描述符作为量化分子性质的关键数值,能够从多维度反映药物分子的结构和化学特征,在药物相互作用预测中起着举足轻重的作用。RDKit 库凭借其强大的功能,为我们提供了丰富的分子描述符计算方法,涵盖了多个重要方面的分子性质。 分子量…

[Python学习日记-79] socket 开发中的粘包现象(解决模拟 SSH 远程执行命令代码中的粘包问题)

[Python学习日记-79] socket 开发中的粘包现象&#xff08;解决模拟 SSH 远程执行命令代码中的粘包问题&#xff09; 简介 粘包问题底层原理分析 粘包问题的解决 简介 在Python学习日记-78我们留下了两个问题&#xff0c;一个是服务器端 send() 中使用加号的问题&#xff0c…

origin如何在已经画好的图上修改数据且不改变原图像的画风和格式

例如我现在的.opju文件长这样 现在我换了数据集&#xff0c;我想修改这两个图表里对应的算法里的数据&#xff0c;但是我还想保留这图像现在的形式&#xff0c;可以尝试像下面这样做&#xff1a; 右击第一个图&#xff0c;出现下面&#xff0c;选择Book[sheet1] 选择工作簿 出…