添加链接描述
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:# 21. 合并两个有序链表def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:cur = dummy = ListNode() # 用哨兵节点简化代码逻辑while list1 and list2:if list1.val < list2.val:cur.next = list1 # 把 list1 加到新链表中list1 = list1.nextelse: # 注:相等的情况加哪个节点都是可以的cur.next = list2 # 把 list2 加到新链表中list2 = list2.nextcur = cur.nextcur.next = list1 if list1 else list2 # 拼接剩余链表return dummy.nextdef mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:m = len(lists)if m == 0: return None # 注意输入的 lists 可能是空的if m == 1: return lists[0] # 无需合并,直接返回left = self.mergeKLists(lists[:m // 2]) # 合并左半部分right = self.mergeKLists(lists[m // 2:]) # 合并右半部分return self.mergeTwoLists(left, right) # 最后把左半和右半合并
思路:
- 和上一题一样,分治法和递归做
- 然后mergeKlists函数,使用分治法,逐个合并链表
- 这个题比较简单