/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类vector * @return ListNode类 */ void insertLists(ListNode* pre, ListNode* node) { ListNode* next = pre->next; pre->next = node; node->next = next; return; } ListNode* deleteLists(ListNode* pre, ListNode* next) { ListNode* node = pre->next; pre->next = next; node->next = nullptr; return node; } ListNode* mergeKLists(vector<ListNode*>& lists) { // write code here ListNode* dummyhead = nullptr; ListNode* node = nullptr; if(!lists.size()) return nullptr; for(int i = 0; i < lists.size(); ++i) { ListNode* create_head = new ListNode(0); create_head->next = lists[i]; lists[i] = create_head; } for(auto it : lists) { if(!dummyhead) { dummyhead = it; continue; } ListNode* chead = it; ListNode* temp = dummyhead; while(chead && chead->next) { node = deleteLists(chead, chead->next->next); while(temp && temp->next && node->val > temp->next->val) { temp = temp->next; } insertLists(temp, node); } } return dummyhead->next; } };
使用哨兵节点简化解题中对头尾节点的处理,链表为正排序链表,因此每次循环插入时不用回退,减少代码运行时间提高代码质量