問題描述:
請判斷乙個鍊錶是否為回文鍊錶
解法一:
得到所有的值,轉換為判斷會問陣列
class
solution
:def
ispalindrome
(self, head: listnode)
->
bool
: ptr=head
val=
if(not head)
or head.
next
==none
:return
true
while
(ptr)
: ptr=ptr.
next
a=len(val)
if(a==2)
:if val[0]
==val[1]
:return
true
else
:return
false
print
(val[
0:a//2]
) b=val[ceil(a/2)
:a]print()
if(val[
0:a//2]
==b[::
-1])
:return
true
else
:return
false
這是把後半數組反轉判斷,可以省一點時間,也可以直接對全部陣列反**
開闢了陣列,空間複雜度o(n),時間複雜度o(n)。
解法二:快慢指標利用快慢指標把練鍊錶分為前半部分和後半部分,快慢指標的移動參考下圖
並且在慢指標移動的過程中進行前面鍊錶的反轉,可以節省時間。
解法三:棧利用棧先入後出的特性,可以判斷回文。
class
solution
p = head;
while
(p) s.
pop();
p = p-
>next;
}return1;}};
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...
leetcode 鍊錶 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 利用快慢指標找到中間節點,當快指標走到末尾時,慢指標指向中間節點 交中間節點之後的節點進行鍊錶反轉 設定指標p1從h...
回文鍊錶 LeetCode
請判斷乙個鍊錶是否為回文鍊錶。你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?輸入 1 2 2 1 輸出 true 思路 如何判斷回文,從中間位置開始向兩邊不斷判斷相等並移動。關鍵點一 如何找到鍊錶中間位置。採用兩個指標,指標p移動兩格,指標mid移動一格,當p移動終點時,指標mid所在...