LeetCode01 反轉鍊錶(簡單)

2021-10-02 06:40:57 字數 545 閱讀 8317

問題描述

反轉乙個單鏈表。

示例:輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

一、常規方法

1.求解思路

用乙個指標pre來記錄前乙個元素,不斷將當前元素的next指標指向pre,直到當前指標為null。

【原理】迴圈不變式:參考《演算法導論(第三版)》第10頁。

迴圈不變式的三條性質:

(1)初始化:迴圈的第一次迭代之前,它為真;

(2)保持:如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真;

(3)終止:在迴圈終止時,不變式為我們提供乙個有用的性質,該性質有助於證明演算法是正確的。

2.**

class

solution

return pre;}}

;

二、高效方法(留)

LeetCode 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?思路 雙指標,先用乙個指標算出鍊錶結點個數n,每次快指標從頭往先前移動n 步,慢指標往前移動1步進行交換即可。definition for sin...

LeetCode 反轉鍊錶

反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null 思路分析 直接一趟掃瞄即可。方法二 遞迴 definition for singly linked list.struct listnode class solution listnode reversea...

反轉鍊錶 LeetCode

遞迴版本稍微複雜一些,其關鍵在於反向工作。假設列表的其餘部分已經被反轉,現在我該如何反轉它前面的部分?假設列表為 n1 nk 1 nk nk 1 nm 若從節點 nk 1 到 nm 已經被反轉,而我們正處於 nk n1 nk 1 nk nk 1 nm 我們希望 nk 1 的下乙個節點指向 nk 所以...