/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类vector * @return ListNode类 */ ListNode* mergeKLists(vector<ListNode*>& lists) { // write code here ListNode* head = nullptr; int k = lists.size(); if (k >= 2) { int mid = k / 2; std::vector<ListNode*> leftLists; leftLists.resize(mid); std::vector<ListNode*> rightLists; rightLists.resize(k-mid); copy(lists.begin(), lists.begin() + mid, leftLists.begin()); copy(lists.begin() + mid, lists.end(), rightLists.begin()); return merge2Lists(mergeKLists(leftLists), mergeKLists(rightLists)); }else if (k == 1) { return lists[0]; } return nullptr; } ListNode* merge2Lists(ListNode* left, ListNode* right) { if (left == nullptr) { return right; } if (right == nullptr) { return left; } ListNode* head = nullptr; ListNode* currentHead = nullptr; while (left != nullptr and right != nullptr) { ListNode* smallerNode = left->val <= right->val ? left : right; if (currentHead != nullptr) { currentHead->next = smallerNode; } else { head = smallerNode; } currentHead = smallerNode; if (left->val <= right->val) { left = left->next; } else { right = right->next; } } if (left == nullptr) { currentHead->next = right; } else { currentHead->next = left; } return head; } };