①遍历两个列表,用指针的方法分别比较当前的两个链表中的值的大小,新的链表指向小的那一个,小的那一个指向自己的下一个。如果有一个链表比另一个长,所以还需要对多余的链表进行拼接。
class Solution:
"""
执行结果:通过
执行用时:48 ms, 在所有 Python3 提交中击败了75.53%
的用户
内存消耗:15.2 MB, 在所有 Python3 提交中击败了88.80%的用户
通过测试用例:218 / 218
"""
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
newList = ListNode()
head = newList
while l1 and l2:
if l1.val < l2.val:
newList.next = l1
l1 = l1.next
else:
newList.next = l2
l2 = l2.next
newList = newList.next
# 这里可以进行优化:
if l1:
newList.next = l1
if l2:
newList.next = l2
# 使用三元表达式 A if x else B
newList.next = l1 if l1 else l2
return head.next
--------------------题解
看了题解,和我这个方法一样的,可以对我这个代码进行一些优化。
Python 三元表达式写法 A if x else B
,代表当 x = Truex=True 时执行 A ,否则执行 B
② 使用递归的方法:保留小的那个,然后将后面的比较后一个个拼接
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if not l1: return l2
if not l2: return l1
if l1.val < l2.val: # 那个小就保留哪个
l1.next = self.mergeTwoLists(l1.next, l2)
return l1 # 当前层返回已排好序的节点
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
-