/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* sortList(ListNode* head) {
if(!head || !head->next) return head;
ListNode* midhead = findMid(head);
ListNode* newhead = midhead->next;
midhead->next = nullptr;
ListNode* left = sortList(head);
ListNode* right = sortList(newhead);
return merge(left,right);
}
ListNode* findMid(ListNode* head)
{
ListNode* slow = head;
ListNode* fast = head;
while(fast->next && fast->next->next)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
ListNode* merge(ListNode* left,ListNode* right)
{
if(!left) return right;
if(!right) return left;
if(left->val < right->val)
{
left->next = merge(left->next,right);
return left;
}
else
{
right->next = merge(left,right->next);
return right;
}
}
};
leetcode每日一题第112天
于 2024-06-17 10:55:19 首次发布