回文序列之鍊錶

2021-10-02 13:39:38 字數 883 閱讀 9316

之前我寫了兩篇關於回文性質的文章。

現在遇到一種特殊的回文例項,即鍊錶的回文性質確定。

給乙個單向鍊錶,如何確定其為回文鍊錶?

確定回文的最快方法為找到中間元素,左右開弓,比較對折重疊位置上元素值是否相等。

要解決這個問題,得先找到鍊錶的中間位置,怎麼找?

乙個方法快慢指標法。

乙個指標以單個單個元素向前推進,另乙個指標一次前進兩個單位(每個元素為一單位)

這樣當快指標到達了鍊錶末端,慢指標就在鍊錶的中間位置了;

要注意一點,當鍊表為偶數,慢指標的位置剛好是鍊錶對折的後半段的開頭位置;

而當鍊表為奇數,慢指標的位置正好是鍊錶的正中間,而該元素不參與值得比較(因為該位置不成對)。

找到中間位置後,便將鍊錶一拆為二,將前半段翻轉,與後半段進行相應元素比較。

/**

* definition for singly-linked list.

* public class listnode

* }

*///節點詳情

class

solution

else

if(speed!= null && speed.next.next == null)

//這段if語句比較首尾兩個元素是否相等可以提前判斷 頭尾不相等的鍊錶為非回文鍊錶}if

(speed != null)

ohalf = ohalf.next;

//奇數鍊錶 後半段頭指標前一乙個單位

while

(ohalf.next != null && half != null)

//前後半段鍊錶元素比較

return

true;}

}

leetcode之回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false示例 2 輸入 1 2 2 1 輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?其實可以把鍊錶的回文分析轉到普通陣列的回文分析中,基本思想就是拿到鍊錶中的每個node的val,然後把這些值按照先後順...

演算法之鍊錶回文鍊錶判斷

問題描述 編寫乙個函式,檢查輸入的鍊錶是否是回文的。示例 輸入 1 2 輸出 false 輸入 1 2 2 1 輸出 true 方法一 要求時間複雜度為o n 空間複雜度為o 1 1.獲取中間位置 獲取中間位置,可以通過快慢指標實現 2.從中間位置一次向兩側對比 從中間向兩側對比,需要將左半部分進行...

鍊錶 回文鍊錶

在leetcode上有兩個題 234.回文鍊錶 面試題 02.06.回文鍊錶 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?遍歷一遍鍊錶得到值的陣列 判斷陣列是...