【Leetcode刷题】算法:合并两个有序链表

news2024/11/11 4:49:02

文章目录

  • 一、题目介绍
  • 二、解决办法
  • 三、提交结果

一、题目介绍

在这里插入图片描述

二、解决办法

首先定义一个名为ListNode的类:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

ListNode代表一个链表节点,每个节点包含一个值(val)和一个指向下一个节点的指针(next)。

构造函数(init)被用来初始化ListNode类的实例。它接受两个参数:val和next。

val是节点的值,next是指向下一个节点的指针。这些参数都有默认值,如果没有提供参数,则val默认为0,next默认为None。

通过使用这个类,我们可以创建链表,并在每个节点中存储特定的值。例如,可以使用以下代码创建一个包含三个节点的链表:

node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)

node1.next = node2
node2.next = node3

在上面的示例中,node1是链表的第一个节点,它的值为1。node2是第二个节点,值为2,并且它的next指针指向node3。node3是最后一个节点,值为3,并且它的next指针为None,表示链表结束。

通过连接多个ListNode对象的next指针,可以构建一个完整的链表。这样,我们可以遍历链表并访问每个节点的值和指针,执行各种链表操作。

接下来,是合并两个链表:

class Solution:
    def mergeTwoLists(self, list1: ListNode, list2: ListNode) -> ListNode:
        # 判断边界情况,如果其中一个链表为空,则直接返回另一个链表
        if not list1:
            return list2
        if not list2:
            return list1

        # 定义一个哨兵节点作为合并后链表的头节点
        head = ListNode(0)
        curr = head

        # 遍历两个链表,比较节点值,并将较小值的节点连接到合并后链表中
        while list1 and list2:
            if list1.val <= list2.val:
                curr.next = list1
                list1 = list1.next
            else:
                curr.next = list2
                list2 = list2.next
            curr = curr.next

        # 将剩余的节点连接到合并后链表的末尾
        if list1:
            curr.next = list1
        if list2:
            curr.next = list2

        return head.next

定义了一个类Solution。

mergeTwoLists方法接受两个参数:list1和list2,这两个参数都是ListNode类型的链表。

如果其中一个链表为空(即为None),则直接返回另一个链表。这是对边界情况的处理,确保在其中一个链表为空时,返回另一个非空链表。

定义一个哨兵节点(head)作为合并后链表的头节点,它的值为0。哨兵节点可以简化链表操作,最后返回head.next即为合并后的链表。

定义一个当前节点(curr),初始时指向头节点(head)。

进入一个循环,循环条件是list1和list2都不为空。在循环中,比较list1和list2当前节点的值,将较小值的节点连接到合并后链表中。

如果list1当前节点的值小于等于list2当前节点的值,则将list1当前节点连接到合并后链表中,并将list1指针后移。

如果list2当前节点的值小于list1当前节点的值,则将list2当前节点连接到合并后链表中,并将list2指针后移。

不断更新curr指针,指向合并后链表的最后一个节点。

当循环结束后,可能会有一个链表已经遍历完,但另一个链表还有剩余节点。如果list1还有剩余节点,则将剩余节点连接到合并后链表的末尾;如果list2还有剩余节点,则同样将剩余节点连接到合并后链表的末尾。

最后返回head.next,即为合并后的链表。

三、提交结果

在这里插入图片描述

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

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

相关文章

【python】给你女神制作一个520图片墙吧~

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 环境使用 所需软件&#xff1a; Python 3.8 解释器 Pycharm 编辑器 模块使用&#xff1a; 内置模块 import re >>> python独有的匹配字符串的模块&#xff0c;该模块种提供功能基于正则表达式实现的&#xff0c…

六级备考28天|CET-6|听力第一讲|基本做题步骤与方法|13:30~14:30

目录 1. 重点词汇 proofread / ˈpruːfriːd / v.校对&#xff0c;校阅 autonomous adj.独立的 obsession n. 喜好 ample …

网络安全的学习路线

在众多高大上的学习路线指导中&#xff0c;尝试做一股清流&#xff0c;把要讲清楚的都讲清楚&#xff0c;该学些什么&#xff0c;学到哪个程度进入到下一阶段的学习这些才是最重要的。 在学习之前首先要做好学习的系统规划&#xff1a; 1.目前市场需求主流的岗位里&#xff0…

vue3+ts+wangEditor5菜单栏添加自定义图标按钮,自定义弹出界面内容,自定义插入链接 五步走

Wangeditor安装&#xff1a;VUE3的安装 &#xff0c;其它看官网&#xff1a; npm install wangeditor/editor --save npm install wangeditor/editor-for-vuenext --save 官网&#xff1a;优势 | wangEditor 官方插入自定义内容样例&#xff1a; https://github.com/wange…

XDP入门体验之hello world

本文目录 1、下面这二张图&#xff0c;能非常好的说明XDP在Linux内核里的网络数据处理架构上的位置。2、XDP提供了可编程的灵活处理方式&#xff0c;XDP 程序可以通过 XDP action code来指定驱动程序对报文的后续处理方式&#xff1a;3、一个将收到的报文在XDP里直接丢弃的例子…

一款IP合并和分解工具

一&#xff1a;需求说明 近期在工作中有个需求&#xff0c;需要将七千多个ip地址&#xff08;有的带掩码&#xff0c;有的不带掩码&#xff09;进行合并尝试&#xff0c;看能不能通过合并减少ip的条目数。这就涉及到ip和掩码的计算&#xff0c;举例如下: 192.168.1.0/25 192.16…

第四章 matlab的循环结构

循环(loop)是一种 matlab 结构,它允许我们多次执行一系列的语句。循环结构有两种 基本形式:while 循环和 for 循环。两者之间的最大不同在于代码的重复是如何控制的。在 while 循环中,代码的重复的次数是不能确定的,只要满足用户定义的条件,重复就进行下 去。相对地,在 fo…

前端uniapp+后端springboot 详细教程《实现微信小程序授权登录》(附完整前后端项目demo)

实现微信小程序授权登录 1、前端技术栈1.1、uniapp1.2、前端封装工具1.3、Hbuilderx构建uniapp项目 2、后端技术栈2.1、创建springboot后端项目2.2、数据库准备2.3、创建实体类2.4、后端工具类2.5、mapper和service接口2.5、Service实现类2.6、微信用户的控制层Controller 微信…

怎么将png转jpg在线处理?图片转换格式工具分享

做设计的小伙伴经常需要进行图片格式转换&#xff0c;但是下载安装软件比较耗费时间&#xff0c;操作起来也很不方便&#xff0c;今天就来介绍一个在线格式转换的方法&#xff0c;下面以png转jpg在线&#xff08;https://www.yasuotu.com/geshi&#xff09;处理为例子给大家演示…

基本的排序算法

一、插入排序 基本思想&#xff1a;在待排序的元素中&#xff0c;假设前面n-1(其中n>2)个数已经是排好顺序的&#xff0c;现将第n个数插到前面已经排好的序列中&#xff0c;然后找到合适自己的位置&#xff0c;使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素…

JVM内存模型概述

当谈到Java虚拟机&#xff08;JVM&#xff09;的内存模型时&#xff0c;我们需要了解JVM如何管理内存并执行Java应用程序。理解JVM的内存模型对于编写高效、可靠的Java代码至关重要。本文将介绍JVM的内存模型&#xff0c;并通过图示进行说明。 JVM内存模型概述 JVM内存模型定义…

5年自动化测试经验的一些感悟—愿测试进阶路上的你不在迷茫

作为一个测试人&#xff0c;我们或多或少都听过或用过自动化&#xff0c;我们都曾在初入测试行业时&#xff0c;满怀期待的以为测试的尽头是不用测试员点点了&#xff0c;项目一提测&#xff0c;小手点下自动化的开关&#xff0c;瞬间测试的工作就完成了。 这就是我一开始从开…

Python-增加b站视频播放量

前言 本文是该专栏的第1篇&#xff0c;后面会持续更新对应平台干货知识&#xff0c;记得关注。 需求背景和说明&#xff1a;实现获取真实播放量&#xff0c;以及增加播放量 废话不多说&#xff0c;跟着笔者直接往下看正文&#xff0c;在文中将结合代码进行详细说明。&#xf…

【数据结构】从数据结构角度深入探究队列

队列是计算机科学中的一种基本数据结构&#xff0c;用于存储和管理数据。在计算机程序中&#xff0c;队列被广泛应用于任务调度、进程管理等场景。本文将介绍队列的概念、特点、常见操作以及应用。 文章目录 队列的概念队列的应用队列的存储结构队列接口的实现队列的初始化队尾…

plt.plot(x,y,color,linestyle,marker)函数参数详解

一、plt.plot()函数详解 plt.plot()函数是matplotlib库中用于绘制线条图的函数&#xff0c;它有多个参数可以控制绘图的各个方面。以下是常用的一些参数及其作用&#xff1a; x: x轴数据的列表或数组y: y轴数据的列表或数组linewidth: 线条的宽度&#xff0c;从0到无穷大的浮…

( 动态规划) 115. 不同的子序列 ——【Leetcode每日一题】

❓115. 不同的子序列 难度&#xff1a;困难 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数。 题目数据保证答案符合 32 位带符号整数范围。 示例 1&#xff1a; 输入&#xff1a;s “rabbbit”, t “rabbit” 输出&#xff1a;3 解释&…

智能变电站远程监控解决方案

智能变电站远程监控解决方案 一、项目背景 变电站是改变电压、控制和分配电能的场所&#xff0c;为了加强对变电站的监管力度&#xff0c;抓好供电作业的动态管理&#xff0c;及时、实时的掌握变电站的安全隐患的整改消除情况&#xff0c;确保安全生产贯穿于供电的全过程&…

如何禁用烦人的“insert”键

在我们日常的电脑使用中&#xff0c;有些按键可能会让我们感到非常烦恼&#xff0c;其中最常见的就是“insert”键。这个键位于键盘的右上角&#xff0c;通常会在我们不经意间被按下&#xff0c;导致我们的输入出现了一些奇怪的问题。如果你也曾经遇到过这个问题&#xff0c;那…

在网络安全领域中,主要有哪些技术方向?

入门Web安全、安卓安全、二进制安全、工控安全还是智能硬件安全等等&#xff0c;每个不同的领域要掌握的技能也不同。 当然入门Web安全相对难度较低&#xff0c;也是很多人的首选。主要还是看自己的兴趣方向吧。 本文就以下几个问题来说明网络安全大致学习过程&#x1f447; 网…

Vue3项目初始配置(更新中ing)

文章目录 别名路径联想配置方法 element plus按需引入并使用风格定制 eslint文件名不强制检测编辑.eslintrc.cjs 别名路径联想 在编写代码的过程中&#xff0c;一旦 输入 / , VSCode会立刻 联想出src下的所有子目录和文件, 统一文件路径访问不容易出 配置方法 在项目的根目…