gpt4 book ai didi

python实现合并两个有序列表的示例代码

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python实现合并两个有序列表的示例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

题目描述

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

leetcode原题地址:https://leetcode-cn.com/problems/merge-two-sorted-lists/ 。

测试用例

示例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服务器上已经封装了链表类,在本地测试时我需要自己来实现链表类,代码如下 。

python" id="highlighter_27402">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
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,反之可得另一种情况的处理方法.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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然后再比较大小即可,对于最后没遍历完的部分,直接追加到合并链表的后面即可.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 合并两个有序列表内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/sinat_29957455/article/details/113420273 。

最后此篇关于python实现合并两个有序列表的示例代码的文章就讲到这里了,如果你想了解更多关于python实现合并两个有序列表的示例代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com