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

yizhihongxing

下面是“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日

相关文章

  • imac——全新重装mac系统

    以下是iMac全新重装mac系统的完整攻略,包含两个示例说明: 步骤一:备份数据 在重装mac系统之前,务必备份您的重要数据。您可以使用Time Machine或其他备份工具来备份数据。以下是备份数据的步骤: 连接外部硬盘。 将外部硬盘连接到iMac上。 打开Time Machine。 在macOS中,可以使用Spotlight搜索Time Machine,…

    other 2023年5月9日
    00
  • Word怎么设计简洁的日历年历?

    下面是“Word怎么设计简洁的日历年历”的完整攻略: 步骤1:打开Word软件,选择一个适合的模板或创建一个表格 在Word中,可以选择多种类型的模板来创建日历或年历。打开Word后,可以在文件新建窗口中搜索“日历”或“年历”,然后选择一个适合的模板。 如果没有合适的模板,可以创建一个表格来设计日历或年历。选择“插入”菜单中的“表格”选项,在弹出的下拉菜单中…

    other 2023年6月27日
    00
  • 在unittest中使用 logging 模块记录测试数据的方法

    data}’) # 执行测试断言 self.assertEqual(data, 10) 5. 运行测试用例,查看日志输出: “`python if __name__ == ‘__main__’: unittest.main() 示例说明1:记录测试数据 def test_addition(self): # 测试数据 num1 = 5 num2 = 10 #…

    other 2023年10月16日
    00
  • Flash单例模式怎么使用? Flash cs6单例模式的实例教程

    Flash单例模式是一种常用的设计模式,主要用于保证一个类只有一个实例,避免多个实例之间的冲突和资源浪费。以下是Flash cs6单例模式的实例教程: 一、单例模式的实现 具体实现单例模式需要遵循以下几个步骤: 创建一个私有静态变量,用于保存类的唯一实例,初始值为null。 创建一个私有静态方法,用于获取类的唯一实例。该方法应当判断唯一实例是否已经存在,如果…

    other 2023年6月26日
    00
  • postman使用cookie

    Postman使用Cookie 在API开发中,我们常常需要通过请求头或者请求参数来传递认证信息或者标识用户身份,其中Cookie就是最常用的一种传递方式之一。Postman作为一种强大的API测试工具,也支持使用Cookie来进行测试。 什么是Cookie? Cookie(通常也称为浏览器Cookie或HTTP Cookie),指某些网站为了辨别用户身份、…

    其他 2023年3月28日
    00
  • Android使用NumberPicker实现滑轮日期选择器

    Android使用NumberPicker实现滑轮日期选择器攻略 在Android应用中,我们可以使用NumberPicker控件来实现滑轮日期选择器。下面是一个详细的攻略,包含了两个示例说明。 步骤一:添加依赖 首先,我们需要在项目的build.gradle文件中添加NumberPicker的依赖。在dependencies块中添加以下代码: implem…

    other 2023年9月6日
    00
  • JavaScript中使用构造器创建对象无需new的情况说明

    以下是使用标准的Markdown格式文本,详细讲解JavaScript中使用构造器创建对象无需new的情况说明的完整攻略: JavaScript中使用构造器创建对象无需new的情况说明 在JavaScript中,通常使用new关键字来创建对象实例。但是,有些情况下,我们可以通过一些技巧,实现在不使用new关键字的情况下创建对象。下面是两种常见的方法: 方法一…

    other 2023年10月14日
    00
  • javascript轮播图怎么实现

    JavaScript轮播图怎么实现 轮播图是网站中常见的UI组件,可以展示多张图片或者内容,使网站更加丰富多彩,提升用户体验。而JavaScript作为实现交互效果的主要技术,在轮播图中得到了广泛应用。本文将介绍如何使用JavaScript实现一个简单的轮播图,包括制作效果界面和编写JavaScript代码。 制作效果界面 轮播图的效果界面是使用HTML和C…

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