题目描述:
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题代码:
class Solution {
public:
void quickSort(vector<int> &arr, int front, int tail) {
if (front < tail) {
int l = front, r = tail, x = arr[front];
while (l < r) {
while (l < r && arr[r] > x) r--;
if (l < r) arr[l++] = arr[r];
while (l < r && arr[l] < x) l++;
if (l < r) arr[r--] = arr[l];
}
arr[l] = x;
quickSort(arr, front, l-1);
quickSort(arr, l+1, tail);
}
}
ListNode* sortList(ListNode* head) {
if (head == NULL) return head;
vector<int> arr;
ListNode *p = head;
while (p) {
arr.push_back(p->val);
p = p->next;
}
// sort(arr.begin(), arr.end()); // STL sort()
quickSort(arr, 0, arr.size()-1);
p = head;
for (int i = 0; i < arr.size(); i++) {
p->val = arr[i];
p = p->next;
}
return head;
}
};
运行结果: