classSolution(object): defmergeKLists(self, lists): """ :type lists: List[ListNode] :rtype: ListNode """ self.nodes = [] head = point = ListNode(0) for l in lists: while l: self.nodes.append(l.val) l = l.next for x in sorted(self.nodes): point.next = ListNode(x) point = point.next return head.next
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None
classSolution: defmergeKLists(self, lists: List[ListNode]) -> ListNode: ifnot lists: return n = len(lists) if n < 2: return lists[n - 1] mid = n // 2 left = lists[0:mid] right= lists[mid:] return self.merge(self.mergeKLists(left), self.mergeKLists(right))
defmerge(self, l, r): new_node = ListNode(0) n = new_node while l and r: if l.val <= r.val: n.next, l = l, l.next else: n.next, r = r, r.next n = n.next if l: n.next = l if r: n.next = r return new_node.next
复杂度分析
时间复杂度:我们可以在 O(n)的时间内合并两个有序链表,其中 n 是两个链表中的总节点数。将所有的合并进程加起来,我们可以得到时间复杂度为 O(Nlogk),其中 k 是链表的数目。