class Solution(object):
def adjust_to_min_heap(self, arr, i, end):
while i < end:
l = 2 * i + 1
r = 2 * i + 2
min_ind = i
if l < end and arr[l][0] < arr[min_ind][0]:
min_ind = l
if r < end and arr[r][0] < arr[min_ind][0]:
min_ind = r
if min_ind == i:
break
else:
arr[min_ind], arr[i] = arr[i], arr[min_ind]
i = min_ind
return arr
def mergeKLists(self, lists):
"""
:type lists: List[ListNode]
:rtype: ListNode
"""
if len(lists) == 0:return None
k = len(lists)
temp = []
for i in range(len(lists)):
if lists[i] == None:
temp.append((2147483647, -1))
else:
temp.append((lists[i].val, i))
first = (k - 1)/2
while first >= 0:
temp = self.adjust_to_min_heap(temp, first, len(temp))
first -= 1
res = ListNode('#')
start = res
end = len(temp)
while True:
cur = temp[0]
if cur[1] == -1:break
res.next = ListNode(cur[0])
lists[cur[1]] = lists[cur[1]].next
temp[0] = (lists[cur[1]].val, cur[1]) if lists[cur[1]] else (2147483647, -1)
temp = self.adjust_to_min_heap(temp, 0, end)
res = res.next
return start.next