在o(nlogn)
時間複雜度和常數級空間複雜度下,對鍊錶進行排序。
示例1
示例2輸入: 4->2->1->3
輸出: 1->2->3->4
思路:使用快慢指標尋找鍊錶中點,並分解鍊錶輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
class
solution
:def
sortlist
(self, head: listnode)
-> listnode:
ifnot
(head and head.
next):
return head
pre, slow, fast =
none
, head, head
while fast and fast.
next
: pre, slow, fast = slow, slow.
next
, fast.
next
.next
pre.
next
=none
return self.mergetwolists(
*map
(self.sortlist,
(head, slow)))
defmergetwolists
(self, l1: listnode, l2: listnode)
-> listnode:
if l1 and l2:
if l1.val > l2.val: l1, l2 = l2, l1
l1.next
= self.mergetwolists(l1.
next
, l2)
return l1 or l2
Leetcode 148 排序鍊錶
在 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 148 排序鍊錶
在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 輸入 4 2 1 3輸出 1 2 3 4示例 2 輸入 1 5 3 4 0輸出 1 0 3 4 5歸併這裡我感覺有點不符合題意 不符合常數空間 如果是快排的話呢,交換節點還是很麻煩的,所以快排交換值了 癱.jpg cl...
leetcode148 排序鍊錶
在 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....