leetcode 148鍊錶排序 (001)

2021-10-05 01:11:16 字數 882 閱讀 9154

方法:參考

因為有時間複雜度要求o(nlogn) , 所以考慮歸併排序。歸併排順是不斷的把待排的部分分成兩部分。

技巧:使用快慢指標,慢指標每走一步,快指標走兩步。最後結束,剛好慢指標走到中間。

(1)首先判斷元素個數,如果為空或者只有乙個,直接返回。

(2)定義兩個快慢指標,和乙個pre指標,指向第一部分的最後乙個元素。

(3)第一遍遍歷結束後,pre->next,這樣第一部分就完整了,然後merge排序,兩部分。注意這裡遞迴呼叫,sortlist不斷地切分。

(4)merge排序有兩個鍊錶;首先建立虛擬頭節點,和cur

(5)如果兩部分都存在,那麼直接比較,cur指向小的鍊錶,然後更新小的,如果有乙個不存在,那麼直接讓cur指向存在的鍊錶。

class

solution

pre-

>next =

null

;return

merge

(sortlist

(head)

,sortlist

(slow));

// 迭代操作

} listnode*

merge

(listnode*l1, listnode*l2)

else

cur = cur-

>next;}if

(l1) cur-

>next = l1;

if(l2) cur-

>next = l2;

listnode* resnode = dummynode-

>next;

delete dummynode;

return resnode;}}

;

leetcode 148 鍊錶排序

題目 用nlog n 的時間複雜度,實現鍊錶的排序 思路 列表或者陣列可以直接用歸併排序來做,但是鍊錶沒法做,因為鍊錶只有順序關係,很難定位到乙個元素 中點 在這裡需要對歸併排序做一些改動 tip 如何定位到鍊錶中點?雙指標法 雙指標法。沒錯,就是之前判斷鍊錶有環的方法。乙個指標走一步,乙個指標走兩...

鍊錶 排序鍊錶(leetcode 148

在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。以下解析來自於 常見排序方法有很多,插入排序,選擇排序,堆排序,快速排序,氣泡排序,歸併排序,桶排序等等。它們的時間複雜度不盡相同,而這裡題目限定了時間必須為o nlgn 符合要求只有快速排序,歸併排序,堆排序 所以說,本題 l...

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在陣列儲存下的歸併排序,需要借出輔助空間完成,而鍊錶儲存的歸併排序,不需要借助輔助空間,直接在原來的鍊錶上進行操作,...