請判斷一個鏈表是否為回文鏈表奶甘。
示例 1: 輸入:1->2? ? 輸入:1->2->2->1
輸出:false ? 輸出:true
自己實現(xiàn)使用一個vector,保存每一個值刁赖,再判斷是不是回文。
進階:你能否用?O(n) 時間復雜度和 O(1) 空間復雜度解決此題?->原文
要使用O(1)的空間復雜度锦亦,我們只能在給出的鏈表身上做文章。我們首先找到鏈表的中點令境,然后將中點后的鏈表反轉(zhuǎn)杠园,再與前面的節(jié)點進行比較。
這里對代碼進行一下解釋舔庶,第一個while循環(huán)是通過快慢指針找到鏈表的中點抛蚁,慢指針每次走一步,快指針每次走兩步惕橙,當快指針到達鏈表結(jié)尾時篮绿,慢指針即指向鏈表中點。
第二個while循環(huán)是對中點后面的鏈表部分進行反轉(zhuǎn)吕漂,以鏈表1,2,3,4,4,3,2,1為例亲配,每次對后面鏈表進行一次調(diào)整,具體過程圖解如下:
得到反轉(zhuǎn)后的鏈表后惶凝,第三個while就不用多說了吼虎,循環(huán)比較兩個鏈表對應位置元素即可。