234 回文鍊錶

2022-09-18 06:27:40 字數 1085 閱讀 7112

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

示例 1:

輸入: 1->2

輸出: false

示例 2:

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

輸出: true

高階:

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

解題思路:

1.使用arraylist將鍊錶中的資料儲存在陣列中,再用快慢指標判斷是否回文。

這種解法時間複雜度和空間複雜度都是 o(n)。

2.用快慢指標遍歷鍊錶,快指標走到鍊錶結尾時,慢指標走到一半,把滿指標之後的鍊錶反轉。再把兩半鍊錶進行比較。

class solution 

listnode slow = head;

listnode quick = head;

//快慢指標遍歷

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

//鍊錶反轉

listnode p1 = slow.next;

listnode temp = p1.next;

p1.next = null;

while(temp != null)

//此時p1為後半段開頭,遍歷兩個鍊錶並比較

while(p1 != null)

p1 = p1.next;

head = head.next;

}return true;

}}

重點,當鍊表個數為單數時在快慢指標遍歷的時候會出現nullpointerexception錯誤,原因是只判斷了quick.next.next是否為空,但當鍊錶個數為單數時,走到最後乙個節點,會報錯。

所以但快指標走到最後乙個節點時,判斷下乙個是否為空,並用短路或結束判斷避免訪問到quick.next.next報錯。

234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true首先建立兩個指標指向鍊錶,然後使其中乙個指標指向鍊錶中間,這裡可以使用另乙個指標快速移動,當另乙個指標移動速度是前一根指標的一倍時,就可以使slow指標到一半,而fast指標遍歷完了。使用...

234 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?正確思路是1.先找到鍊錶的中點 通過快慢雙指標,快指標一次移動兩個單位,慢指標一次移動乙個單位,當快指標頂到頭的時...

234回文鍊錶

題目描述 請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 題解思路 首先反思一下,我這一題的第一想法是將整個鍊錶反轉,然後和原鍊錶同步遍歷,全部相同便是回文鍊錶,但是發現,你在反轉鍊錶的時候,原鍊錶被破壞了,所以第一次失敗。然後...