当前位置: 首页 > news >正文

hot100_21. 合并两个有序链表

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

示例 1:
在这里插入图片描述

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

输入:l1 = [], l2 = []
输出:[]
示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

迭代

思路

我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。

算法

首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前节点的值小于等于 l2 ,我们就把 l1 当前的节点接在 prev 节点的后面同时将 l1 指针往后移一位。否则,我们对 l2 做同样的操作。不管我们将哪一个元素接在了后面,我们都需要把 prev 向后移一位。

在循环终止的时候, l1 和 l2 至多有一个是非空的。由于输入的两个链表都是有序的,所以不管哪个链表是非空的,它包含的所有元素都比前面已经合并链表中的所有元素都要大。这意味着我们只需要简单地将非空链表接在合并链表的后面,并返回合并链表即可。

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode prehead = new ListNode(-1);ListNode prev = prehead;while( list1!=null && list2!=null){if(list1.val<=list2.val){prev.next = list1;list1 = list1.next;} else {prev.next = list2;list2 = list2.next;}prev = prev.next;}prev.next = list1 == null?list2:list1;return prehead.next;}
}
http://www.lryc.cn/news/530354.html

相关文章:

  • 代码讲解系列-CV(一)——CV基础框架
  • C++ Primer 标准库类型string
  • 计算机网络安全与运维的关键 —— 常用端口全解析
  • Vue.js 的介绍与组件开发初步
  • 【仿12306项目】通过加“锁”,解决高并发抢票的超卖问题
  • wow-agent---task4 MetaGPT初体验
  • MVANet——小范围内捕捉高分辨率细节而在大范围内不损失精度的强大的背景消除模型
  • 94,【2】buuctf web [安洵杯 2019]easy_serialize_php
  • LabVIEW如何有效地进行数据采集?
  • 6 [新一代Github投毒针对网络安全人员钓鱼]
  • 《Origin画百图》之脊线图
  • linux 函数 sem_init () 信号量、sem_destroy()
  • Kafka架构
  • 刷题记录 动态规划-2: 509. 斐波那契数
  • RDP协议详解
  • 设计模式的艺术-观察者模式
  • 【C语言设计模式学习笔记1】面向接口编程/简单工厂模式/多态
  • Baklib如何优化企业知识管理提升团队协作与创新能力分析
  • Dubbo view
  • 分享刷题过程中有价值的两道题目
  • 蓝桥杯例题六
  • DeepSeek 详细使用教程
  • 《tcp/ip协议详解》,tcp/ip协议详解
  • 游戏引擎 Unity - Unity 设置为简体中文、Unity 创建项目
  • 【数据结构】_时间复杂度相关OJ(力扣版)
  • [Java]异常
  • 【C++语言】卡码网语言基础课系列----13. 链表的基础操作I
  • Vue.js组件开发-实现图片浮动效果
  • 自制Windows系统(十一、Windows11GUI)
  • 索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实?(中英双语)