leetcode148 排序鍊錶

2021-09-13 16:09:48 字數 1253 閱讀 5072

在 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.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

sortlist

(self, head: listnode)

-> listnode:

ifnot head or

not head.

next

:return head

pre_slow, slow, fast = head, head, head # 快慢指標找中點分成兩個鍊錶

while fast and fast.

next

: pre_slow = slow

slow = slow.

next

fast = fast.

next

.next

pre_slow.

next

=none

l1, l2 = self.sortlist(head)

, self.sortlist(slow)

return self.merge(l1, l2)

defmerge

(self, l1, l2):if

not l1:

return l2

ifnot l2:

return l1

if l1.val < l2.val:

l1.next

= self.merge(l1.

next

, l2)

return l1

else

: l2.

next

= self.merge(l1, l2.

next

)return 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...

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借助乙個排序演算法來進行實現,因為要求在o n log n 時間複雜度下進行排序,選擇歸併排序 思路 在整個鍊錶進...