def mergeKLists(self, lists): """ :type lists: List[ListNode] :rtype: ListNode """ if not lists: return None st = PriorityQueue() for x in lists: if x: st.push(x, x.val) if st.size() == 0: return None head = tail = None while st.size() != 0: ptr = st.pop() if ptr.next: st.push(ptr.next, ptr.next.val) ptr.next = None if ptr == None: continue if tail == None: head = ptr else: tail.next = ptr tail = ptr tail.next = None return head
def buildPriorityQueue(freq_table): PriorityQueue = MinNodePriorityQueue() for item, freq in freq_table.iteritems(): # print ("added %s: %d"%(item, freq)) PriorityQueue.push(Node(item, freq)) return PriorityQueue