解題思路
如果考慮一次 merge k 的太麻煩,就兩兩 merge 來簡化問題。
merge 的部分偷懶用遞迴,有機會的話改成非遞迴的版本。
程式碼
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size() == 0) return nullptr;
while(lists.size() > 1)
{
lists.push_back(merge2Lists(lists[0], lists[1]));
lists.erase(lists.begin());
lists.erase(lists.begin());
}
return lists[0];
}
ListNode* merge2Lists(ListNode* l1, ListNode* l2)
{
if(!l1) return l2;
if(!l2) return l1;
if(l1->val <= l2->val)
{
l1->next = merge2Lists(l1->next, l2);
return l1;
}
else
{
l2->next = merge2Lists(l1, l2->next);
return l2;
}
}
};
沒有留言:
張貼留言