sort a linked list in o(n log n) time using constant space complexity.
example 1:
example 2:
歸併排序:首先將鍊錶從中部切分為兩個部分,不斷遞迴這個過程
遞迴回溯的時候將兩個鍊錶歸併為有序鍊錶
public listnode sortlist
(listnode head)
public listnode mergesort
(listnode head)
listnode slow = head;
listnode fast = head;
listnode mid = null;
while
(null != fast && null != fast.next)
// mid.next == slow, 從鍊錶中間位置將其後的節點斷開
mid.next = null;
listnode node1 =
mergesort
(head)
; listnode node2 =
mergesort
(slow)
;return
mergetwolists
(node1, node2);}
public listnode mergetwolists
(listnode l1, listnode l2)
else
p = p.next;
} p.next = null == l1 ? l2 : l1;
return dummyhead.next;
}
鍊錶排序演算法
1 題目 對亂序的鍊錶進行排序,要求空間複雜度為常數。leetcode 148 中等 輸入 4 2 1 3 輸出 1 2 3 4 輸入 1 5 3 4 0 輸出 1 0 3 4 5 2 思路 對於這題我有兩種解法,一種是時間複雜度o n2 對於暴力解法,我們會將整個鍊錶分為 有序段 和 無序段 兩段...
排序演算法 鍊錶實現
陣列的高效體現於隨機訪問,插排 快排等排序演算法未用到這一特點,故這兩種排序演算法可基於鍊錶實現 插入排序 迭代器 p順序訪問鍊錶 迭代器 i順序訪問前 p 個元素 主要的操作為 當p i p.value刪除原位置的 p將p插入 i 1 與 i 之間 若為單向鍊錶,儲存 i 1與 p 1 演算法複雜...
排序演算法和鍊錶
void swap int a,int b 2.加法 void swap int a,int b 3.異或 相同為0,不同為1.可以理解為不進製加法 void swap int a,int b 2 求最大公約數。1.直接遍曆法 int maxcommondivisor int a,int b ret...