题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类vector * @return ListNode类 */ // 解题思路,将k个链表拆分,两两合并 ListNode* mergeKLists(vector<ListNode*>& lists) { // write code here if (lists.size() == 0) { return nullptr; } if (lists.size() == 1) { return lists[0]; } ListNode* head = lists[0]; for(int i = 1; i < lists.size(); ++i) { head = MergeList(head, lists[i]); } return head; } // 升序合并两个链表 ListNode* MergeList(ListNode* pHead1, ListNode* pHead2) { if (!pHead1) { return pHead2; } if (!pHead2) { return pHead1; } ListNode* head = new ListNode(0); ListNode* cur = head; while (pHead1 && pHead2) { if (pHead1->val <= pHead2->val) { cur->next = pHead1; pHead1 = pHead1->next; } else { cur->next = pHead2; pHead2 = pHead2->next; } cur = cur->next; } if (pHead1) { cur->next = pHead1; } if (pHead2) { cur->next = pHead2; } return head->next; } };