題目描述:請判斷乙個鍊錶是否為回文鍊錶。
回文的意思就是,正著讀跟反著讀都是一樣的。
解法一:棧既然是正反進行比較,剛好利用棧的「先進後出」特點,出棧的順序剛好就是反著讀。
出棧節點和原鍊錶節點同時進行比較,有任意乙個節點不相同,就不是回文。
時間複雜度:遍歷鍊錶o(n),出棧o(n),總計o(2n),去常數項o(n)
空間複雜度:呼叫系統棧需要額外空間o(n)
classsolution
while (!stack.isempty())
head =head.next;
}return
true
; }
}
方法二:快慢指標+反轉鍊錶快指標一次走2步,慢指標一次走1步,快指標走到null時,慢指標停下,此時慢指標就是中間節點。
將中間節點的下乙個節點進行反轉,此時如果是乙個回文鍊錶,將以中間節點為對稱軸。
使用兩個新的指標,乙個從煉表頭開始,乙個從反轉部分的表頭開始,走一步比較一次,如果有乙個節點不想等就不是回文鍊錶。
classsolution
listnode leftheadnode =head;
listnode midnode =findmidnode(head);
listnode rightheadnode =reverselinkedlist(midnode.next);
while (leftheadnode !=null && rightheadnode !=null
) leftheadnode =leftheadnode.next;
rightheadnode =rightheadnode.next;
}return
true
; }
/*反轉鍊錶:返回反轉後的煉表頭節點
*/public
listnode reverselinkedlist(listnode head)
return
prevnode;
}/*尋找中間節點
*/public
listnode findmidnode(listnode head)
return
low;}}
LeetCode 234 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。definition for singly linked list.struct listnode bool ispalindrome struct listnode head 示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 要...
leetcode 234 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false 示例 2 輸入 1 2 2 1輸出 true 解法1 使用棧 使用快慢指標找中點,原理是每次快指標走兩步,慢指標走一步,等快指標走完時,慢指標的位置就是中點。我們還需要用棧,每次慢指標走一步,都把值存入棧中,等到達中點時,鍊錶的前...
LeetCode 234 回文鍊錶
請判斷乙個鍊錶是否為回文鍊錶。解題思路 根據 o n 時間複雜度和 o 1 空間複雜度的要求,則不能使用堆疊。首先找到中間節點,然後反轉中間節點之後的節點,最後比較頭結點和中間節點之後元素的大小。bool solution ispalindrome listnode head 1.找到鍊錶的中間位置...