力扣之鍊錶9 回文鍊錶

2021-10-01 23:51:59 字數 1543 閱讀 7361

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

高階:你能否用 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 空間複雜度解決此題?思路 尋找中間結點,然後將後半部分鍊錶倒置,後半部分鍊錶長度是小於或等於原鍊錶的,所以根據後半部分鍊錶來確定對比迴...