python实现合并两个排序的链表

下面是“python实现合并两个排序的链表”的完整攻略:

1. 题目描述

给定两个排好序的链表,将这两个链表合并成一个新的链表并返回。

例如,输入链表1为 1->2->4,链表2为 1->3->4,则合并后的新链表为 1->1->2->3->4->4。

2. 思路

  • 定义新链表的头结点;
  • 定义一个游标,指向新链表的头结点,同时遍历原有的两个链表;
  • 比较原有两个链表的当前结点,将较小值的结点作为新链表的下一个结点,并将游标后移;
  • 将较小值的链表也后移一位,重复上述过程直到有一条链表为空,将另一条链表剩余结点直接连接上新链表的尾部;
  • 最后返回新链表的首节点。

3. 代码实现

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


class Solution:
    def mergeTwoLists(self, l1, l2):
        dummy = ListNode(0)    # 定义新链表的头结点
        curr = dummy    # 定义游标,初始指向头结点
        while l1 and l2:
            if l1.val <= l2.val:
                curr.next = l1
                l1 = l1.next
            else:
                curr.next = l2
                l2 = l2.next
            curr = curr.next    # 游标后移
        curr.next = l1 if l1 else l2    # 将剩余链表连接到新链表尾部
        return dummy.next    # 返回新链表的首节点

4. 示例说明

示例一:

链表1:1->2->4

链表2:1->3->4

合并后的新链表:1->1->2->3->4->4

l1 = ListNode(1)
l1.next = ListNode(2)
l1.next.next = ListNode(4)

l2 = ListNode(1)
l2.next = ListNode(3)
l2.next.next = ListNode(4)

sol = Solution()
new_list = sol.mergeTwoLists(l1, l2)

while new_list:
    print(new_list.val, end=' ')
    new_list = new_list.next

输出结果为:1 1 2 3 4 4

示例二:

链表1:1->3->4->7

链表2:2->5->6->8

合并后的新链表:1->2->3->4->5->6->7->8

l1 = ListNode(1)
l1.next = ListNode(3)
l1.next.next = ListNode(4)
l1.next.next.next = ListNode(7)

l2 = ListNode(2)
l2.next = ListNode(5)
l2.next.next = ListNode(6)
l2.next.next.next = ListNode(8)

sol = Solution()
new_list = sol.mergeTwoLists(l1, l2)

while new_list:
    print(new_list.val, end=' ')
    new_list = new_list.next

输出结果为:1 2 3 4 5 6 7 8

以上就是“python实现合并两个排序的链表”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现合并两个排序的链表 - Python技术站

(0)
上一篇 2023年6月28日
下一篇 2023年6月28日

相关文章

  • android中的常用尺寸单位(dp、sp)快速入门教程

    以下是关于“Android中的常用尺寸单位(dp、sp)快速入门教程”的完整攻略,包括基本概念、使用方法和两个示例。 基本概念 在Android中常用的尺寸单位有dp和sp。dp是density-independent pixel(密度无关像素)的缩写,它是一种基于屏幕密度的抽象单位,可以保证在不同的屏幕密度下,UI元素的大小和位置保持一致。sp是scale…

    other 2023年5月7日
    00
  • Bandizip在哪查看版本号?Bandizip查看版本号教程

    Bandizip版本号查看攻略 Bandizip是一款流行的压缩软件,如果你想查看Bandizip的版本号,可以按照以下步骤进行操作: 打开Bandizip软件:在你的电脑上找到并双击打开Bandizip软件。 导航到“帮助”菜单:在Bandizip的主界面上,你会看到一个菜单栏。点击菜单栏上的“帮助”选项。 查看版本号:在“帮助”菜单下拉列表中,你会看到一…

    other 2023年8月3日
    00
  • Java无限级树(递归)超实用案例

    Java无限级树(递归)超实用案例 简介 无限级树即为树形结构,每个节点都可以拥有多个子节点,并且每个子节点都可以继续拥有多个子节点,即“无限级”;递归则以特定的方式循环重复调用函数,以实现某种算法的目的。本案例通过将递归运用到无限级树上,实现了一个非常实用的树形结构数据处理方法。 实现思路 在Java中实现无限级树的情况下,我们可以通过创建一个树节点类,其…

    other 2023年6月27日
    00
  • golang进程内存控制避免docker内oom

    Golang进程内存控制避免Docker内OOM攻略 在使用Golang编写应用程序并在Docker容器中运行时,可能会遇到内存不足的问题,导致容器被系统强制终止(OOM)。为了避免这种情况,我们可以采取一些措施来控制Golang进程的内存使用。 1. 使用runtime.MemStats包 Golang的runtime包提供了MemStats结构体,可以用…

    other 2023年8月2日
    00
  • vim块操作

    Vim 块操作攻略 Vim 是一个非常流行的文本编辑器,提供了许多有用的功能,其中包括块操作。在本攻略中,我们将详细介绍如何使用 Vim 的块操作来编辑文本。 步骤1:选择块 在 Vim 中,可以使用 Ctrl + v 快捷键来选择块。以下是一个示例步骤: 在 Vim 中打开要编辑的文件。 按下 Ctrl + v 快捷键。 使用方向键或 hkl 键来选择块。…

    other 2023年5月6日
    00
  • 苹果IOS9.3.3越狱安装不兼容插件重启进入safe mode安全模式现象的解决方案

    苹果IOS9.3.3越狱安装不兼容插件重启进入safe mode安全模式现象的解决方案 问题描述 苹果IOS9.3.3越狱后,在Cydia中安装了某个不兼容的插件后,会出现重启以后进入safe mode安全模式的现象,无法正常使用。 解决步骤 为了解决这个问题,需要进行以下步骤的操作: 1.进入safe mode安全模式 首先,需要进入safe mode安全…

    other 2023年6月26日
    00
  • python使用 __init__初始化操作简单示例

    当我们创建一个Python类时,我们有时需要在实例化对象时进行一些初始化操作。这就是使用Python的__init__函数的地方。在这篇文章中,我将详细讲解如何使用__init__函数进行初始化操作。下面是完整攻略: 1. __init__函数的基本用法 __init__函数是Python类的构造函数,它用于初始化新创建的对象。当我们实例化一个类时,__in…

    other 2023年6月20日
    00
  • sqlserver中常用的函数及实例

    SQL Server 中常用的函数及实例 在 SQL Server 中,函数是用来执行特定任务并返回结果的代码块。函数可以用于简化复杂的查询,并且提高查询的执行效率。本文将介绍 SQL Server 中常用的一些函数,以及它们在实际应用中的一些示例。 1. 字符串函数 在查询中,我们可能需要对字符串进行一些处理,比如字符串的拼接、分割等等。SQL Serve…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部