文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何在python中合并两个有序列表

2023-06-14 09:29

关注

本篇文章给大家分享的是有关如何在python中合并两个有序列表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

测试用例

示例1

如何在python中合并两个有序列表

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例2

输入:l1 = [], l2 = []
输出:[]

示例3

输入:l1 = [], l2 = [0]
输出:[0]

代码详解

因为LeetCode服务器上已经封装了链表类,在本地测试时我需要自己来实现链表类,代码如下

class ListNode:  def __init__(self, val, next=None):    if isinstance(val,int):      self.val = val      self.next = next    elif isinstance(val,list):      self.val = val[0]      self.next = None      head = self      for i in range(1,len(val)):        node = ListNode(val[i],None)        head.next = node        head = head.next

递归法

递归法的思路比较简单,我们需要先判断链表l1链表l2是否为空,如果为空直接返回另一个链表即可就不需要进行比较了。如果不为空,我们就需要比较链表节点的值谁的更大,如果l1大于l2我们就更改链表l2的下一个节点,然后再比较l2的下一个节点和l1,反之可得另一种情况的处理方法。

class Solution:  def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:    #如果链表l1为None直接返回链表l2即可    if l1 is None:      return l2    #如果链表l2为None直接返回链表l1即可    elif l2 is None:      return l1    #如果链表l1大于链表l2    elif l1.val > l2.val:      #更改链表l2下一个节点的指向      l2.next = self.mergeTwoLists(l1,l2.next)      return l2    else:      #更改链表l1下一个节点的指向      l1.next = self.mergeTwoLists(l1.next,l2)      return l1l1 = ListNode([1,2,4])l2 = ListNode([1,3,4])s = Solution()l = s.mergeTwoLists(l1,l2)while l:  print(l.val)  l = l.next

遍历法

这个算法更简单了,我们只需要遍历链表l1和l2然后再比较大小即可,对于最后没遍历完的部分,直接追加到合并链表的后面即可。

class Solution:  def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:    #用来合并链表    prehead = ListNode(-1)    #创建一个哨兵节点    pre = prehead    while l1 and l2:      if l1.val > l2.val:        pre.next = l2        l2 = l2.next      else:        pre.next = l1        l1 = l1.next      #更改哨兵节点的下一个指向      pre = pre.next    pre.next = l1 if l1 else l2    return prehead.nextl1 = ListNode([1,2,4])l2 = ListNode([1,3,4])s = Solution()l = s.mergeTwoLists(l1,l2)while l:  print(l.val)  l = l.next

以上就是如何在python中合并两个有序列表,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯