leetcode 回文鍊錶

2021-09-25 09:56:14 字數 1544 閱讀 3412

簡單的可以直接把所有數字提出來觀察是不是回文即可,我們這裡只講一下高階解法,可以將該鍊錶切開切成兩半,根據是奇數長度還是偶數長度自己微調一下即可,然後將其中的一段翻轉,然後與另一端比較,如果依次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所在...