https://leetcode.com/problems/merge-k-sorted-lists/description/
Use max heap, the time complexity is O( log(k) * N )
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { if (lists.empty()) return nullptr; auto comparor = [](ListNode* lhs, ListNode* rhs) { return lhs->val > rhs->val; }; priority_queue<ListNode*, vector<ListNode*>, decltype(comparor)> pri_queue(comparor); // perpare queue with K items for(auto& list : lists) { if (list != nullptr) pri_queue.push(list); } ListNode* head = new ListNode(-1); ListNode* prev = head; ListNode* current = nullptr; while (!pri_queue.empty()) { current = pri_queue.top(); prev->next = current; ListNode* next = current->next; pri_queue.pop(); if (next != nullptr) pri_queue.push(next); prev = current; } return head->next; } };