- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
参考:合并两个有序链表 。
到此这篇关于python实现合并两个有序列表的示例代码的文章就介绍到这了,更多相关python 合并两个有序列表内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python实现合并两个有序列表的示例代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的.
leetcode原题地址:https://leetcode-cn.com/problems/merge-two-sorted-lists/ 。
示例1 。
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 。
示例2 。
输入:l1 = [], l2 = [] 输出:[] 。
示例3 。
输入:l1 = [], l2 = [0] 输出:[0] 。
因为leetcode服务器上已经封装了链表类,在本地测试时我需要自己来实现链表类,代码如下 。
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!