python如何合并有序列表?教你两个办法
Admin 2021-05-22 群英技术资讯 2508 次浏览
本文主要给大家分享关于python实例,主要介绍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__(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 l1
l1 = 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.next
l1 = 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合并有序列表的实现就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。想要学习更多python合并有序列表的技巧,可以关注其他相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
在这篇文章中我们来了解一下python事件,包括延迟运行事件、重叠事件、事件优先级、取消事件、其他方法。一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
这篇文章主要介绍了分享方便调试Python代码的2个实用工具,可以方便展示我们调试代码的中间状态,提升大家的编码效率,详细的介绍需要的小伙伴可以参考一下下面文章内容
这篇文章主要给大家介绍了关于python学习之panda数据分析核心支持库的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
python双端队列deque怎样理解?很多刚接触Python的朋友可能不是很了解双端队列deque,因此这篇文章就给大家来详细的介绍一下双端队列deque的实现,感兴趣的朋友就继续往下看吧。
python是没有三元描述符的,但是可以通过模拟的实现。其中一种是:(X and V1) or V2正常情况下是不会有错误的,但是文章中也提到了,当
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008