在 o(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。
示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4
示例 2:
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
採用歸併排序,將陣列換成鍊錶即可
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
return
sort
(head,
0,i-1)
;}listnode*
sort
(listnode* head,
int l,
int r)
listnode* tmp=cur->next;
cur->next=nullptr;
//斷開
listnode* left=
sort
(head,l,mid)
; listnode* right=
sort
(tmp,mid+
1,r)
; listnode* res=
merge
(left,right)
;return res;
} listnode*
merge
(listnode* a,listnode* b)
else
if(b==nullptr)
else
if(a->valval)
else
}return root->next;}}
;
每日leetcode 奇偶鍊錶
給定乙個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 o 1 時間複雜度應為 o nodes nodes 為節點總數。示例 1 輸入 1 2 3 4 5 null ...
leetcode 鍊錶排序
對鍊錶排序,用歸併排序。題目要求空間時間複雜度為o nlogn 但是空間複雜度為o 1 1.自己寫的程式,時間複雜度為o nlogn 但是空間複雜度為o n 用快慢指標 分別走2步和1步 找到中間節點。但是最後排序的部分,用複製將排好序的部分貼上會原來鍊錶中,這個方法比較笨,而且增加空間複雜度,並不...
leetcode 鍊錶 排序
思路 使用歸併排序。拆分 合併均採用遞迴方式。public listnode sortlist listnode head pre.next null return merge sortlist head sortlist slow public listnode merge listnode l1...