判斷鍊錶是否為回文結構(BAT面試題)

2021-10-05 02:23:18 字數 971 閱讀 1843

一,題目描述

對於乙個鍊錶,請設計乙個時間複雜度為o(n),額外空間複雜度為o(1)的演算法,判斷其是否為回文結構。給定乙個鍊錶的頭指標a,請返回乙個bool值,代表其是否為回文結構。保證鍊錶長度小於等於900。

測試用例:

1->2->2->1

返回:true

二,解決思路

先找到 a 鍊錶的中間節點

從 b (從中間結點)開始對後面的鍊錶進行逆置操作

分別從 a 和 b 出發, 來依次對比兩個鍊錶的元素是否對應相等.

三,**實現

public

boolean

chkpalindrome

(listnode a)

// 上面的迴圈結束後, b 就指向 a 鍊錶的中間位置了

// 2. 從 b 開始對後面的鍊錶進行逆置操作

listnode prev = null;

listnode cur = b;

while

(cur != null)

//逆置關鍵操作更換指向

cur.next = prev;

prev = cur;

cur = next;

}// 3. 分別從 a 和 b 出發, 來依次對比兩個鍊錶的元素是否對應相等.

// 如果鍊錶的長度為 奇數 個, 那 a 和 b 長度是相同的, 此時無影響

// 如果鍊錶的長度為 偶數 個, 那 a 的長度比 b 要長乙個元素, 就需要注意遍歷的時候迴圈結束條件

// 要以 b 為基準

while

(b != null)

a = a.next;

b = b.next;

}return

true

;}

判斷鍊錶是否為回文結構

給定乙個鍊錶的頭節點 head,請判斷該鍊錶是否為回文 正反結構相同 結構。如果鍊錶長度為 n,時間複雜度達到 o n 額外空間複雜度達到 o 1 參考 程式設計師 面試指南 放入棧,時間複雜度o n 空間複雜度o n bool ispalindrome1 node head while null ...

OJ 判斷鍊錶是否為回文結構

思路 先找到鍊錶的中間節點,然後將鍊錶從中間節點之後的後半段反轉 然後將前半段與後半段逐一進行比較。鍊錶的建立 struct listnode bool ispalindrome struct listnode head 將後半段進行反轉 struct listnode newhead null s...

判斷是否為回文結構

法一 棧 時間o n 空間o n public static boolean ispanlindrome node head second second.next second指向後半部分第乙個元素 stackstack new stack while second null while stack...