题目:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4->4->5->6
思路:递归,判断有多少个ListNode,若只有1个则返回lists[0],0个则返回None。其余的先sort列表的前1/2,然后sort列表的后1/2,然后排序所返回的列表。
代码:
class Solution:
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
list_num = len(lists)
if list_num == 1:
return lists[0]
elif list_num == 0:
return None
list_num = list_num // 2
list1 = self.mergeKLists(lists[:list_num])
list2 = self.mergeKLists(lists[list_num:])
new_list = ListNode(0)
last = new_list
while list1 != None and list2 != None:
if list1.val < list2.val:
last.next = list1
list1 = list1.next
last = last.next
else:
last.next = list2
list2 = list2.next
last = last.next
if list1 == None:
last.next = list2
else:
last.next = list1
return new_list.next