【Python刷题】合并两个有序列表

问题描述

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

示例 1:

c 复制代码
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

python 复制代码
输入:l1 = [], l2 = []
输出:[]

示例 3:

python 复制代码
输入:l1 = [], l2 = [0]
输出:[0]

解决办法

具体排序结果如上图所示,

  • 首先如果只有一条有序链表,则无序排序
python 复制代码
if list1 is None:
	return list2
if list2 is None:
   	return list1
  • 比较两个链表中数值的大小,如果链表1中的数小于链表2中对应的数,则使链表1中的这个数排在前面,这个数的next指针指向链表1中的下一个数再和链表2中的数值进行比较后的较小的值。
  • 如果链表2中的数小于链表1中的数也是一样的
  • 使用递归方法来完成合并

代码示例

python 复制代码
class Solution:
    def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
        if list1 is None:
            return list2
        if list2 is None:
            return list1
        
        if list1.val <= list2.val:
            list1.next = self.mergeTwoLists(list1.next,list2)
            return list1
        else:
            list2.next = self.mergeTwoLists(list1,list2.next)
            return list2

运行结果:

相关推荐
郝学胜-神的一滴10 分钟前
Python数据模型:深入解析及其对Python生态的影响
开发语言·网络·python·程序人生·性能优化
cici1587421 分钟前
二值化断裂裂缝的智能拼接算法
人工智能·算法·计算机视觉
麦格芬23027 分钟前
LeetCode 763 划分字母区间
算法·leetcode·职场和发展
free-elcmacom32 分钟前
机器学习进阶<8>PCA主成分分析
人工智能·python·机器学习·pca
福尔摩斯张1 小时前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
liu****1 小时前
Python 基础语法(二):程序流程控制
开发语言·python·python基础
涛涛北京1 小时前
【强化学习实验】- 策略梯度算法
人工智能·算法
大连好光景1 小时前
Python打日志
运维·python·运维开发
栀秋6661 小时前
深入浅出链表操作:从Dummy节点到快慢指针的实战精要
前端·javascript·算法
syt_biancheng2 小时前
博客系统全流程测试总结
python·selenium·测试用例·压力测试·postman