請判斷乙個鍊錶是否為回文鍊錶。
示例 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所在...