鍊錶15 鍊錶的回文結構

2021-07-31 08:34:20 字數 2074 閱讀 7448

題目:請編寫乙個函式,檢查鍊錶是否為回文。給定乙個鍊錶listnode* phead,請返回乙個bool,代表鍊錶是否為回文。測試樣例:返回:true返回:false

思路:判斷回文是字串中也經常會出現的乙個問題,邏輯並不複雜:對於字串,如果是數字判斷回文,可以迴圈使用取模運算和取餘運算來判斷是否相同;對於字元,怎麼判斷?

鍊錶中的值通常都是數字,因此對於這樣的鍊錶判斷回文類似於對數字判斷是否是回文。

方法一:時間複雜度

o(n),

空間複雜度

o(n)—

利用棧裝載

n個結點

先遍歷一遍鍊錶12321,將結點分別裝入棧中,然後再次遍歷鍊錶12321同時從棧中彈出結點12321,由於棧起到反向的作用,因此如果兩者相同說明是回文結構,這裡無論結點是奇數還是偶數都沒有關係。只是棧中裝入n個結點需要額外占用空間複雜度o(n)。

方法二:時間複雜度

o(n),

空間複雜度

o(n/2)—

利用棧裝載

n/2個結點

也是使用棧,使用兩個指標pfast,pslow對鍊錶1234567進行遍歷,在遍歷同時將pslow遍歷的結點放入到棧中321,當pfast遍歷結束時,pslow剛好到達中間,於是鍊錶的前面一半已經放入到棧中,剛好是前面一半的逆序321,之後慢指標pslow繼續遍歷,同時從棧中彈出結點進行比較,相當於將鍊錶的前面一半折過來與後面的一半鍊錶進行比較。

就是對於鍊錶是基數還是偶數的操作有一些區別:

如果是基數,即pfast.next==null時第一遍遍歷結束,此時pslow在正中間4結點,此時不要將這個結點放入到棧中,之後分別彈棧和遍歷pslow進行比較。

方法三:時間複雜度

o(n),

空間複雜度

o(1),

對後面半條逆序

,之後兩個指標分別從頭尾遍歷

先找到中間結點,即通過pslow和pfast進行遍歷,當pfast.next==null(奇)或者pfast.next.next==null(偶)即說明pfast到達尾部,此時pslow到達中部,將此時的中間結點單獨記錄pmiddle,同時記錄開始的頭結點phead,然後使用指標pmiddle開始對後面的鍊錶進行逆序(逆序保留三個結點即可)

然後從頭結點p1和尾部結點開始進行遍歷,逐個比較值,直到p1==pmiddle為止。

這裡關鍵是對奇數和偶數情況下的不同處理會帶來麻煩。

//①先找到鍊錶的中間結點pmiddle

listnode pslow=phead;

listnode pfast=phead;

//常識:&&只要第乙個條件不滿足,後面條件就不再判斷,這裡恰好當pfast.next==null時就不會比較pfast.next.next從而避免了空指標

while(pfast.next!=null&&pfast.next.next!=null)

//此時pslow所在的位置就是中間結點

listnode pmiddle=pslow;

//②對pmiddle之後的鍊錶進行逆序

listnode ppre=pmiddle;

listnode pcur=ppre.next;

listnode pnext=null;

while(pcur!=null)

//此時完成遍歷且ppre就是尾結點

listnode ptail=ppre;

listnode phead=phead;

//③從頭尾同時開始進行遍歷比較,由規律可知在奇偶狀態下,phead先或者同時到達pmiddle

while(phead!=pmiddle)

return true;}}

鍊錶回文結構

對於乙個鍊錶,請設計乙個時間複雜度為o n 額外空間複雜度為o 1 的演算法,判斷其是否為回文結構。給定乙個鍊錶的頭指標head,請返回乙個bool值,代表其是否為回文結構。思路 實現 public class palindromelist 此時slow位於鍊錶中間,開始反轉鍊錶slow後面的部分 ...

鍊錶回文結構

對於乙個鍊錶,請設計乙個時間複雜度為o n 額外空間複雜度為o 1 的演算法,判斷其是否為回文結構。給定乙個鍊錶的頭指標a,請返回乙個bool值,代表其是否為回文結構。保證鍊錶長度小於等於900。測試樣例 1 2 2 1返回 true解題思路 1 找到鍊錶的中點,2 翻轉後半部分的鍊錶節點 3 依次...

鍊錶的回文結構

題目描述 對於乙個鍊錶,請設計乙個時間複雜度為o n 額外空間複雜度為o 1 的演算法,判斷其是否為回文結構。給定乙個鍊錶的頭指標a,請返回乙個bool值,代表其是否為回文結構。保證鍊錶長度小於等於900。測試樣例 1 2 2 1 返回 true 大體思路 通過快慢指標法得到mid 慢的依次存入棧 ...