LeetCode 234 回文鍊錶

2022-08-23 05:21:17 字數 1302 閱讀 6662

題目描述:請判斷乙個鍊錶是否為回文鍊錶。

回文的意思就是,正著讀跟反著讀都是一樣的。

解法一:棧

既然是正反進行比較,剛好利用棧的「先進後出」特點,出棧的順序剛好就是反著讀。

出棧節點和原鍊錶節點同時進行比較,有任意乙個節點不相同,就不是回文。

時間複雜度:遍歷鍊錶o(n),出棧o(n),總計o(2n),去常數項o(n)

空間複雜度:呼叫系統棧需要額外空間o(n)

class

solution

while (!stack.isempty())

head =head.next;

}return

true

; }

}

方法二:快慢指標+反轉鍊錶

快指標一次走2步,慢指標一次走1步,快指標走到null時,慢指標停下,此時慢指標就是中間節點。

將中間節點的下乙個節點進行反轉,此時如果是乙個回文鍊錶,將以中間節點為對稱軸。

使用兩個新的指標,乙個從煉表頭開始,乙個從反轉部分的表頭開始,走一步比較一次,如果有乙個節點不想等就不是回文鍊錶。

class

solution

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.找到鍊錶的中間位置...