/**
* 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* merge(ListNode* p, ListNode* q) {
ListNode* newHead = new ListNode();
ListNode* r = newHead;
while(p && q) {
if(p->val <= q->val) {
r->next = p;
p = p->next;
}
else {
r->next = q;
q = q->next;
}
r = r->next;
}
if(p) r->next = p;
else r->next = q;
return newHead->next;
}
ListNode* sortList(ListNode* head) {
if(!head || !head->next) return head;
ListNode *slow = head, *fast = head, *pre = nullptr;
while(fast && fast->next) {
pre = slow;
slow = slow->next;
fast = fast->next->next;
}
if(pre) pre->next = nullptr;
head = sortList(head);
slow = sortList(slow);
return merge(head, slow);
}
};
【leetcode 链表】148. Sort List C++
最新推荐文章于 2022-11-15 16:17:39 发布