148 排序鍊錶

2021-10-03 14:02:43 字數 1151 閱讀 1938

在 o(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。

示例 1:

輸入: 4->2->1->3

輸出: 1->2->3->4

示例 2:

輸入: -1->5->3->4->0

輸出: -1->0->3->4->5

好題!1.找到鍊錶的中點,將鍊錶1分為2,利用歸併排序的思想

# 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:

if not head:

return head

return self.mergesort(head)

def mergesort(self,head):

if not head.next:

return head

p = q =head

pre = none

while q and q.next:

pre = p

p = p.next

q = q.next.next

pre.next = none

l1 = self.mergesort(head)

l2 = self.mergesort(p)

return self.merger2link(l1,l2)

def merger2link(self,l1,l2):

if not l1:

return l2

if not l2:

return l1

if l1.vall1.next = self.merger2link(l1.next,l2)

return l1

else:

l2.next = self.merger2link(l1,l2.next)

return l2

148 排序鍊錶

根據演算法題目要求,看出主要考察排序演算法中的歸併排序,那歸併排序的思想類似於分治。簡單描述為 第一步 遞迴,找中點,切割鍊錶 第二步 對每個子鍊錶操作 第三步 把排序好的子鍊錶一步步合併 class solution 遞迴地切割表 直達最後表只有乙個或者沒有乙個節點 再進行合併 listnode ...

148 排序鍊錶

自己做鍊錶的題很容易弄錯,感覺對鍊錶太不熟悉了。需要加強對鍊錶的練習。這種鍊錶題有時感覺思路很簡單,但是在寫 的過程中會發現處理起來要十分的細心。下面 記錄兩種實現方法 都是別人實現的方法 第一種方法 裡注釋掉的部分 不滿足題目要求 1 設定快慢指標分割鍊錶,遞迴 2 對分割後的鍊錶進行排序,合併兩...

148 排序鍊錶

難度 中等 題目描述 思路總結 題目要求時間複雜度o nlog n 想到二分 想到歸併。歸併遞迴解法,額外空間並不是常數級,所以想到非遞迴自底向上的解法。題解一 遞迴 definition for singly linked list.class listnode def init self,x s...