LeetCode演算法題234 回文鍊錶解析

2021-09-01 00:16:39 字數 1946 閱讀 1257

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

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

高階:

你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?

這個題稍微有些複雜,首先一定得找到中點,所以還是使用快慢指標,當快指標到達終點時,慢指標就到中點了,然後需要用棧來儲存慢指標遍歷的元素,因為要與後面一半的鍊錶值對比需要將前面一半反向。

c++源**:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solutionif(

!fast-

>next) s.

pop();

while

(slow-

>next)

return

true;}

};

在高階中提出了要求需要使用o(1)空間,所以不可以使用棧了,這樣就只能把前面或者後面的鍊錶反轉然後進行對比即可,這裡將後面的鍊錶進行反轉,反轉的思路迴圈將後乙個指標指向前面乙個指標,而最前面的指標將指向最後(在中間過程中是讓它不停指向之後指標的下乙個)。所以需要乙個last來儲存最開始的位置,當這個位置指向了空,說明後面的鍊錶已經反轉完畢。

python3源**:

# definition for singly-linked list.

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

solution

:def

ispalindrome

(self, head)

:"""

:type head: listnode

:rtype: bool

"""if head==

none

or head.

next

==none

:return

true

slow = head

fast = head

while fast.

next

!=none

and fast.

next

.next

!=none

: slow = slow.

next

fast = fast.

next

.next

last = slow.

next

pre = head

while last.

next

!=none

: tmp = last.

next

last.

next

= tmp.

next

tmp.

next

= slow.

next

slow.

next

= tmp

while slow.

next

!=none

: slow = slow.

next

if pre.val != slow.val:

return

false

pre = pre.

next

return

true

leetcode刷題234 回文鍊錶

題目描述 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false示例 2 輸入 1 2 2 1 輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 將鍊錶中的資料轉存到陣列中,在陣列中用雙指標比較 definition for singly link...

演算法 LeetCode 234 回文鍊錶

原題鏈結 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?related topics 鍊錶 雙指標 802 0 題解1 解法 1 遍歷一遍鍊錶並儲存到陣列中,然...

LeetCode刷題日記 234 回文鍊錶

判斷乙個給定的鍊錶是否為回文鍊錶。我首先想到的第乙個方案是用反轉鍊錶中的步驟將整個鍊錶反轉,然後比較反轉後的鍊錶與反轉前鍊錶是否相同,如下 definition for singly linked list.struct listnode class solution if curr head el...