請判斷乙個鍊錶是否為回文鍊錶。
高階:你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?
方法1將鍊錶元素存入列表後判斷
但其時間複雜度和空間複雜度為o(n)
class
solution
:def
ispalindrome
(self, head: listnode)
->
bool:if
not head:
return
true
ls=cur=head
while cur:
cur=cur.
next
return ls == ls[::
-1]
方法2
利用快慢指標的方法,快指標移動速度是慢指標的2倍,當快指標移動到尾結點時,慢指標指向鍊錶的中點,將鍊錶的後半部分利用遞迴的方法反轉後和前半部分進行比較
class
listnode
:def
__init__
(self, x)
: self.val = x
self.
next
=none
class
solution
:def
ispalindrome
(self, head: listnode)
->
bool:if
not head or
not head.
next
:return
true
slow = head
fast = head
q = slow
while fast and fast.
next
: slow = slow.
next
fast =fast.
next
.next
revers_list = self.reverse_list(slow)
while revers_list:
if revers_list.val != q.val:
return
false
revers_list = revers_list.
next
q = q.
next
return
true
#反轉後邊的數
defreverse_list
(self,head):if
not head.
next
:return head
last_head = self.reverse_list(head.
next
) head.
next
.next
= head
head.
next
=none
return last_head
力扣 234 回文鍊錶
1.快慢指標 找中點 注意奇偶 分開反轉後半鏈 比較 以後半鏈為主 class solution listnode cur low next 後半鏈當前指標 listnode pre null 用於反轉 摘掉結點 頭插法 low next null 斷鏈 low head 重置low 反轉 whil...
力扣 234 回文鍊錶
一 題目描述 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 二 解題思路 1 先找到鍊錶的中間節點。2 對中間結點的後半部分進行逆置。3 從鍊錶的頭節點和逆置之後的新頭節點進行比較即可。注意 鍊錶的長度為奇數個節點和偶數個節點...
力扣(LeetCode)234 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 尋找中間結點,然後將後半部分鍊錶倒置,後半部分鍊錶長度是小於或等於原鍊錶的,所以根據後半部分鍊錶來確定對比迴...