題目描述:請編寫乙個函式,檢查鍊錶是否為回文。
給定乙個鍊錶listnode* phead,請返回乙個bool,代表鍊錶是否為回文。
測試樣例:
返回:true
返回:false
思路分析:因為使用的是鍊錶,只能查詢前面的元素,不能往後查詢。因此可以選用鍊錶+棧的方式儲存。1、首先,找到前面一半的元素,存到棧中 2、再比較棧和後續鍊錶是否相等
用到的是快慢指標的使用,將慢指標的入棧,還要判斷原煉表是奇數還是偶數,若是奇數的話,中間的可以不用比較。
程式如下
/*
struct listnode
};*/
class palindrome
}//if(2==arr) s.pop();
if(null!=fast)//當前鍊錶不是空時,奇數個
slow=slow->next;
while(slow!=null)
return
true;
}};
234 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true首先建立兩個指標指向鍊錶,然後使其中乙個指標指向鍊錶中間,這裡可以使用另乙個指標快速移動,當另乙個指標移動速度是前一根指標的一倍時,就可以使slow指標到一半,而fast指標遍歷完了。使用...
32 回文鍊錶
解析 1.利用棧求解 首先遍歷鍊錶獲取鍊錶的長度len 根據鍊錶的長度,將鍊錶的前半部分壓入棧,將後半部分依次與彈棧的元素比較看是否一致,一致則為回文鍊錶 這裡注意的是鍊錶的後半部分的開始位置 鍊錶長度的奇偶 public boolean ispalindrome1 listnode head 前半...
234 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?正確思路是1.先找到鍊錶的中點 通過快慢雙指標,快指標一次移動兩個單位,慢指標一次移動乙個單位,當快指標頂到頭的時...