题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ #include <iostream> #include <pthread.h> #include <ratio> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类vector * @return ListNode类 */ ListNode* merge2(ListNode* p, ListNode* q) { if (!p || !q) { return !q ? p : q; } ListNode dummy(-1); ListNode* cur = &dummy; while (p && q) { if (p->val <= q->val) { cur->next = p; p = p->next; } else { cur->next = q; q = q->next; } cur = cur->next; } if (p) { cur->next = p; } if (q) { cur->next = q; } return dummy.next; } ListNode* mergeKLists(vector<ListNode*>& lists) { // write code here ListNode* ans = nullptr; for (int i=0; i<lists.size(); i++) { ans = merge2(ans, lists[i]); } return ans; } };
利用上一题的合并两个排序后的链表函数。
将本题的输入vector一一取出,与空的链表比较,得到第一次比较后的链表
下次循环,将第一次得到的链表和该循环拿出的vector链表比较,得到第二次的新链表