鍊錶問題通常有兩大類思路:
修改節點指標:使得它們以符合要求的順序勾連,例如鍊錶翻轉
修改節點內容:不修改節點指向,而是採取交換或修改其中節點的值
【問題①:刪除鍊錶中node* p指向的節點】
思路:由於沒有前置節點,故無法物理取消前置節點到該節點的勾連,
採用下乙個節點的值覆蓋當前節點的值(實際刪除下乙個節點)
void del(node* p)
注意只能刪除不是末尾的節點,末尾節點無法刪除。
【問題②:鍊錶氣泡排序】
思路:交換過程不修改節點前後關係,而是修改節點的值。
void sort(node* head)
}}
leetcode 鍊錶排序
對鍊錶排序,用歸併排序。題目要求空間時間複雜度為o nlogn 但是空間複雜度為o 1 1.自己寫的程式,時間複雜度為o nlogn 但是空間複雜度為o n 用快慢指標 分別走2步和1步 找到中間節點。但是最後排序的部分,用複製將排好序的部分貼上會原來鍊錶中,這個方法比較笨,而且增加空間複雜度,並不...
leetcode 鍊錶 排序
思路 使用歸併排序。拆分 合併均採用遞迴方式。public listnode sortlist listnode head pre.next null return merge sortlist head sortlist slow public listnode merge listnode l1...
leetcode 排序鍊錶
利用歸併排序的思想,不過這裡排序的不是列表,是乙個鍊錶。具體 如下 definition for singly linked list.class listnode object def init self,x self.val x self.next none class solution obj...