21. Merge Two Sorted Lists
description:
Solution
solution1:暴力遍历
声明一个空的链表linkList3,然后一起遍历了linkList1和linkList2,每次取最小的元素接到linkList3中,然后对应的两遍当前指针往后移动,当两个链表中出现一个链表为空的时候,就把另一个链表直接接在linkList3的后面。
Python3实现代码
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
dumpy = l3 = ListNode(0)#dumpy和l3指向同一块内存空间
while l1 and l2:
if(l1.val<=l2.val):
l3.next = ListNode(l1.val)
l1 = l1.next
else:
l3.next = ListNode(l2.val)
l2 = l2.next
l3 = l3.next
l3.next = l1 or l2 #if l1 is None: l3.next = l2
return dumpy.next
solution2:
第二种思路是采用递归的解法,首先可以将求解该问题转为为求解一个更小规模的问题(减少一个元素)。具体的公式如下所示.
i
f
l
i
n
k
L
i
s
t
1
[
i
]
<
l
i
n
k
L
i
s
t
2
[
i
]
:
m
e
r
g
e
(
l
1.
n
e
x
t
,
l
2
)
e
l
s
e
:
m
e
r
g
e
(
l
1
,
l
2.
n
e
x
t
)
if \ \ linkList1[i] < linkList2[i]: merge(l1.next,l2) \\ else: \ \ merge(l1,l2.next)
if linkList1[i]<linkList2[i]:merge(l1.next,l2)else: merge(l1,l2.next)
class Solution:
def mergeTwoLists(self, l1, l2):
if not l1 or not l2: #递归的结束条件
return l1 or l2
if l1.val <= l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)#递去
return l1#归来
else:
l2.next = self.mergeTwoLists(l1, l2.next)#递去
return l2#归来