題目描述:
對於乙個鍊錶,請設計乙個時間複雜度為o(n),額外空間複雜度為o(1)的演算法,判斷其是否為回文結構。
給定乙個鍊錶的頭指標a,請返回乙個bool值,代表其是否為回文結構。保證鍊錶長度小於等於900。
測試樣例:
1->2->2->1
返回:true
思路:我們先得到原鍊錶的長度,得到它的一半長度。然後建立乙個工作指標,指向長度一半的位置(這裡我們不需要將長度分為奇偶看待,因為奇數時,就會剛好指向最中間位置,偶數時就會指向中間偏後的位置,例:1223,就會指向第二個 2 的節點的位置)。然後我們建立乙個新的鍊錶,從工作節點的位置,採用頭插法插入到新的節點中,然後將新的鍊錶和原來的鍊錶進行比較,看是否時回文鍊錶。
具體**實現如下:
public
class
palindromelist
else
if(a.next == null)
//得到鍊錶長度
int len =
size
(a);
//b用來指向鍊錶中間節點位置
listnode b = a;
for(
int i =
0; i < len /
2; i++
) listnode newhead =
newlistnode(-
1);//頭插法
while
(b != null)
//進行比較
while
(newhead != null)
newhead = newhead.next;
a = a.next;
}return
true;}
public
intsize
(listnode a)
return size;
}}
測試結果如下:
鍊錶回文結構
對於乙個鍊錶,請設計乙個時間複雜度為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 慢的依次存入棧 ...