将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
首先很容易想到的是,用链表存储,能否用列表进行替换,将链表的数据存入列表,再在列表中处理。
# 列表代换方法
if not l1:
return l2
if not l2:
return l1
list_ = []
while l1:
list_.append(l1.val)
l1 = l1.next
while l2:
list_.append(l2.val)
l2 = l2.next
list_ = sorted(list_)
head = ListNode(0)
temp = head
for i in range(0, len(list_)):
temp.next = ListNode(list_[i])
temp = temp.next
return head.next
第二个方法是双指针方法,将小的一方放入链表。
# 双指针
if not l1:
return l2
if not l2:
return l1
if l1.val <= l2.val:
head = l1
l1 = l1.next
else:
head = l2
l2 = l2.next
temp = head
while l1 and l2:
if l1.val <= l2.val:
temp.next = l1
temp = temp.next
l1 = l1.next
else:
temp.next = l2
temp = temp.next
l2 = l2.next
if l1:
temp.next = l1
if l2:
temp.next = l2
return head
第三个方法是递归,确定终止条件是两者有一个为空,返回另一个。
# 递归
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