簡單的可以直接把所有數字提出來觀察是不是回文即可,我們這裡只講一下高階解法,可以將該鍊錶切開切成兩半,根據是奇數長度還是偶數長度自己微調一下即可,然後將其中的一段翻轉,然後與另一端比較,如果依次val都相同,說明是回文,否則不是回文,這樣做的時間複雜度是o(n),空間複雜度為o(1)。
具體**如下:
# definition for singly-linked list.
# class listnode(object):
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution
(object):
defispalindrome
(self, head)
:"""
:type head: listnode
:rtype: bool
"""#切成兩段,將一段反轉,然後相等就返回true 否則返回false
ifnot head or
not head.
next
:return
true
length =
0 ptr = head
while ptr:
length +=
1 ptr = ptr.
next
#singular
if length %2==
1:stride =
(length +1)
//2half = length //
2else
: stride = length //
2 half = length //
2 ptr1 = head
ptr2 = head
for i in
range
(stride)
: ptr2 = ptr2.
next
pre =
none
cur = ptr2
follow = cur.
next
while cur:
cur.
next
= pre
pre = cur
cur = follow
if follow:
follow = follow.
next
for i in
range
(half)
:if pre.val != ptr1.val:
return
false
else
: pre = pre.
next
ptr1 = ptr1.
next
return
true
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所在...