mirror of https://github.com/doocs/leetcode.git
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
/**
|
|
* 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* slow = head;
|
|
ListNode* fast = head->next;
|
|
while (fast && fast->next) {
|
|
slow = slow->next;
|
|
fast = fast->next->next;
|
|
}
|
|
ListNode* l1 = head;
|
|
ListNode* l2 = slow->next;
|
|
slow->next = nullptr;
|
|
l1 = sortList(l1);
|
|
l2 = sortList(l2);
|
|
ListNode* dummy = new ListNode();
|
|
ListNode* tail = dummy;
|
|
while (l1 && l2) {
|
|
if (l1->val <= l2->val) {
|
|
tail->next = l1;
|
|
l1 = l1->next;
|
|
} else {
|
|
tail->next = l2;
|
|
l2 = l2->next;
|
|
}
|
|
tail = tail->next;
|
|
}
|
|
tail->next = l1 ? l1 : l2;
|
|
return dummy->next;
|
|
}
|
|
};
|