148 排序鍊錶

2021-09-28 23:26:00 字數 994 閱讀 1243

自己做鍊錶的題很容易弄錯,感覺對鍊錶太不熟悉了。需要加強對鍊錶的練習。

這種鍊錶題有時感覺思路很簡單,但是在寫**的過程中會發現處理起來要十分的細心。

下面**記錄兩種實現方法(都是別人實現的方法)。

第一種方法(**裡注釋掉的部分):不滿足題目要求

1、設定快慢指標分割鍊錶,遞迴;

2、對分割後的鍊錶進行排序,合併兩個鍊錶。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else

p=p-

>next;}if

(l1) p-

>next=l1;

if(l2) p-

>next=l2;

return dummy-

>next;}

listnode*

sortlist

(listnode* head)

pre-

>next=

null

; head=

sortlist

(head)

; slow=

sortlist

(slow)

;return

mergetwolists

(head,slow)

;/**

mapnums;

listnode* p = head;

while (p)

p = head;

map::iterator iter = nums.begin();

while (iter != nums.end())

iter++;

}return head;

**/}}

;

148 排序鍊錶

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

148 排序鍊錶

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

148 排序鍊錶

在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。示例 1 示例 2 歸併排序 指的是將兩個已經排序的序列合併成乙個序列的操作,因此採用分治法解決該問題。分治法關鍵有兩點 1.分割 把當前序列平均分割成兩半 2.合併 在保持元素順序的同時將上一步得到的子串行合併到一起 bott...