读题心路历程:这道题读完,感觉和21题合并两个有序链表挺像的,只不过从两个变成了K个,所以可不可以用上之前合并两个链表的方法呢?感觉应该是可以的,遍历一遍lists[ ]数组,两个合并一下,合并之后有序新链表再和第三个链表合并......
具体代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* L1, ListNode* L2) {
if (L1 == nullptr) { return L2; }
if (L2 == nullptr) { return L1; }
if (L1->val <= L2->val)
{
L1->next = mergeTwoLists(L1->next, L2);
return L1;
}
else
{
L2->next = mergeTwoLists(L1, L2->next);
return L2;
}
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size() == 0){return nullptr;}
ListNode* cur = nullptr;
for (int i = 0; i < lists.size(); i++) {
cur = mergeTwoLists(cur, lists[i]);
}
return cur;
}
};
暂时还是不要考虑一道题的多个解法了,等刷过一遍能力提上来之后再回头来重新看这道题。