class Solution {
public:
//归并排序
ListNode* sortList(ListNode* head) {
if(head == nullptr || head->next == nullptr) return head;
ListNode *slow = head, *fast = head->next;
while(fast && fast->next){
slow = slow->next;
fast = fast->next->next;
}
ListNode* temp = slow->next;//head of new list
slow->next = nullptr;//cutting list
ListNode* left = sortList(head);
ListNode* right = sortList(temp);
ListNode* h = new ListNode();
ListNode* cur = h;
while(left && right){
if(left->val <= right->val) {
cur->next = left;
left = left->next;
}else{
cur->next =right;
right = right->next;
}
cur = cur->next;
}
if(left) cur->next = left;
if(right) cur->next = right;
return h->next;
}
ListNode* mergeKLists(vector<ListNode*>& lists) {
if(lists.size() == 0) return nullptr;
if(lists.size() == 1) return lists[0];
//链接为一条链表
ListNode* dummyHead = new ListNode();
ListNode* pre = dummyHead;
for(int i = 0; i < lists.size(); i++){
ListNode* cur = lists[i];
if(cur == nullptr) continue;
pre->next = cur;
while(cur && cur->next){
cur = cur->next;
}
if(!cur->next) pre = cur;
}
ListNode* head = dummyHead->next;//新链表头部
//调用归并排序
return sortList(head);
}
};
LeetCode Hot100 23.合并K个升序链表
最新推荐文章于 2024-08-17 20:25:49 发布