介绍
本篇文章给大家分享的是有关如何在python中合并两个有序列表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
示例1
输入: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__ (val,自我,,下一个=None): ,,,if isinstance (val, int): ,,,,,self.val =瓦尔 ,,,,,self.next =, ,,,elif isinstance (val,列出): ,,,,,self.val =, val [0] ,,,,,self.next =,没有 ,,,,,head =自我 ,,,,,for 小姐:拷贝范围(len (val)): ,,,,,,,node =, ListNode (val[我],没有) ,,,,,,,head.next =,节点 ,,,,,,,head =,。下一个递归法
递归法的思路比较简单,我们需要先判断<代码>链表l1 代码>和<代码>链表l2> 代码是否为空,如果为空直接返回另一个链表即可就不需要进行比较了。如果不为空,我们就需要比较链表节点的值谁的更大,如果<代码> l1大于l2 代码>我们就更改链表l2的下一个节点,然后再比较l2的下一个节点和l1,反之可得另一种情况的处理方法。
class 解决方案: def 才能;mergeTwoLists (l1:自我,还以为,ListNode, l2:, ListNode),→, ListNode: ,,,#如果链表l1为没有直接返回链表l2即可 ,,,if l1 is 没有: ,,,,,return l2 ,,,#如果链表l2为没有直接返回链表l1即可 ,,,elif l2 is 没有: ,,,,,return l1 ,,,#如果链表l1大于链表l2 ,,,elif l1.val 祝辞,l2.val: ,,,,,#更改链表l2下一个节点的指向 ,,,,,l2.next =, self.mergeTwoLists (l1, l2.next) ,,,,,return l2 ,,,: ,,,,,#更改链表l1下一个节点的指向 ,,,,,l1.next =, self.mergeTwoLists (l1.next l2) ,,,,,return l1 时间=l1 ListNode ((1、2、4)) 时间=l2 ListNode ((1, 3, 4)) 时间=s 解决方案() 时间=l s.mergeTwoLists (l1, l2) while l: 打印(l.val)才能 l 才能=,l。下一个遍历法
这个算法更简单了,我们只需要遍历链表l1和l2然后再比较大小即可,对于最后没遍历完的部分,直接追加到合并链表的后面即可。
class 解决方案: def 才能;mergeTwoLists (l1:自我,还以为,ListNode, l2:, ListNode),→, ListNode: ,,,#用来合并链表 ,,,prehead =, ListNode (1) ,,,#创建一个哨兵节点 ,,,pre =prehead ,,,while l1 以及l2: ,,,,,if l1.val 祝辞,l2.val: ,,,,,,,pre.next =l2 ,,,,,,,l2 =l2.next ,,,,,其他的: ,,,,,,,pre.next =l1 ,,,,,,,l1 =l1.next ,,,,,#更改哨兵节点的下一个指向 ,,,,,pre =pre.next ,,,pre.next =, l1 if l1 else l2 ,,,return prehead.next 时间=l1 ListNode ((1、2、4)) 时间=l2 ListNode ((1, 3, 4)) 时间=s 解决方案() 时间=l s.mergeTwoLists (l1, l2) while l: 打印(l.val)才能 l 才能=,l。下以上就是如何在python中合并两个有序列表,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
如何在python中合并两个有序列表