题目
解法
递归
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
if list1 is None:
return list2
if list2 is None:
return list1
if list1.val > list2.val:
list1, list2 = list2, list1
if list1.next is None or list1.next.val>=list2.val:
p1 = list1.next
list1.next = list2
list2.next = self.mergeTwoLists(p1, list2.next)
return list1
else:
list1.next = self.mergeTwoLists(list1.next, list2)
return list1
双指针
class Solution:
def mergeTwoLists(self, list1:Optional[ListNode], list2:Optional[ListNode])->Optional[ListNode]:
if list1 is None:
return list2
if list2 is None:
return list1
if list1.val > list2.val:
list1, list2 = list2, list1
head = list1
end = list1
list1 = list1.next
while list1 and list2:
if list1.val <= list2.val:
end.next = list1
end = end.next
list1 = list1.next
else:
end.next = list2
end = end.next
list2 = list2.next
end.next = list1 if list1 else list2
return head
上面的改进一下,引入一个dummy
class Solution:
def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode()
head = dummy
cur = dummy
while list1 and list2:
if list1.val <=list2.val:
cur.next = list1
cur = cur.next
list1 = list1.next
else:
cur.next = list2
cur = cur.next
list2 = list2.next
cur.next = list1 if list1 else list2
return dummy.next