演算法 鍊錶排序

2021-09-26 19:57:34 字數 922 閱讀 1276

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