LeetCode演算法入門 回文鍊錶 解法與分析

2021-09-26 07:33:22 字數 1282 閱讀 9037

請判斷乙個鍊錶是否為回文鍊錶。

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

高階:

你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?

掃瞄整個鍊錶,把數字存到陣列裡面,然後判斷是不是回文。

但是這個方法使用了額外空間。

使用快慢指標分三步做:其一,find mid node 使用快慢指標找到鍊錶中點。 其二,reverse 逆序後半部分。 其三,check 從頭、中點,開始比較是否相同。

原理:快慢指標,快指標一次走兩步,慢指標一次走一步,當快指標走到null時,慢指標指的是鍊錶中點的位置(結點為奇數個慢指標指向中點,結點為偶數個滿指標指向靠後的結點)。

**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

while

(slow)

while

(head && prev)

head = head-

>next;

prev = prev-

>next;

}return

true;}

};

要想達成條件:你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?

我有乙個精妙的想法,因為鍊錶中的資料型別是int,所以可以將鍊錶的數字按數學規則變成整數,還能反向變成正數。

這兩個整數闊以在乙個迴圈內生成,所以時間複雜度為o(n),由於沒有開闢新的空間,所以空間複雜度為o(1)。

但是這種方法是不對的,因為只考慮到了每個節點的值是個位數,沒有考慮到結點為多位數的情況。

**如下:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(result==result_re)

else}}

;

LeetCode入門訓練 回文鍊錶

一種是直接將元素壓入棧 然後依次退棧和鍊錶相比 第二種是快慢指標,fast兩格一跳,slow 一格一跳。在後半壓入棧。與鍊錶相比 第三種 直接在後半段取反 比較完後還原 definition for singly linked list.struct listnode class solution ...

LeetCode初級演算法之鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路一 借助外來的空間 這個題我的初步思路是借助外來的空間,也就不是o 1 的空間複雜度,那麼這個就比較簡單了,只...

回文鍊錶 LeetCode

請判斷乙個鍊錶是否為回文鍊錶。你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?輸入 1 2 2 1 輸出 true 思路 如何判斷回文,從中間位置開始向兩邊不斷判斷相等並移動。關鍵點一 如何找到鍊錶中間位置。採用兩個指標,指標p移動兩格,指標mid移動一格,當p移動終點時,指標mid所在...