【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

运行结果:

相关推荐
杰九5 分钟前
【算法题】46. 全排列-力扣(LeetCode)
算法·leetcode·深度优先·剪枝
manba_13 分钟前
leetcode-560. 和为 K 的子数组
数据结构·算法·leetcode
liuyang-neu14 分钟前
力扣 11.盛最多水的容器
算法·leetcode·职场和发展
忍界英雄22 分钟前
LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)
算法·leetcode·机器人
Kenneth風车23 分钟前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
凌不了云26 分钟前
windows环境下安装python第三方包
开发语言·python
大熊程序猿26 分钟前
python 读取excel数据存储到mysql
数据库·python·mysql
生椰拿铁You29 分钟前
Python
python
鸽芷咕32 分钟前
【Python报错已解决】python setup.py bdist_wheel did not run successfully.
开发语言·python·机器学习·bug
C7211BA41 分钟前
使用knn算法对iris数据集进行分类
算法·分类·数据挖掘