Part1:問題描述
Sort a linked list in O(n log n)
time using constant space complexity.
Part2:解題思路
我看到他說時間複雜度爲O(nlogn)就想到所有的排序裏只有快排能達到這個標準,然後進一步想到#include<algorithm>裏有直接的排序函數可以調用。用連續空間就想到了數組,但是由於不知道有多少元素,就用變長數組vector。所以我就是先把鏈表裏的元素拿到vector裏排個序,再將排完的數據插回到鏈表中。
感覺,這道題可能希望我們自己實現一個快排吧,由於我想睡覺就先這樣吧,之後再繼續補充。
其實對鏈表排序,直接改指針也是很好的,各種複雜度都很低,以後再更吧。先匿了
Part3:代碼
ListNode* sortList(ListNode* head) {
vector<int> num;
if (head == NULL) return head;
ListNode* current;
current = head;
while (current != NULL) {
num.push_back(current->val);
current = current->next;
}
sort(num.begin(), num.end());
current = head;
int index = 0;
while(current != NULL) {
current->val = num[index++];
current = current->next;
}
return head;
}