以前有過判斷回文串,但是對於回文鍊錶,由於鍊錶具有不可回溯性,所以可能需要借用一定空間。
請判斷乙個鍊錶是否為回文鍊錶。
示例 1:
輸入: 1->2
輸出: false
示例 2:
輸入: 1->2->2->1
輸出: true
高階:你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?
1.找到鍊錶的中點。
法一:
遍歷鍊錶,並將num/2;
法二:
用快慢指正依次遍歷,當快指標走到頭時,慢指標剛好在中點位置;
2.將鍊錶的前半部分入棧
3.依次出棧並與鍊錶的後半部分比較。
typedef
struct
creatstack;
bool ispalindrome
(struct listnode* head)
//計算鍊錶元素數量
if(num&1)
flag=1;
num=
(num+1)
/2; p=head;
for(
int i=
0;i(flag)
stack.top--
;while
(p!=
null
)return true;
}
leetcode 234 判斷是不是回文鍊錶
聰明的我想到了利用棧先進後出的特性,求出鍊錶的長度之後前一半入棧,後一半出棧的方法,雖然簡單易懂,但是效率有點低,貼 definition for singly linked list.struct listnode listnode int x val x next nullptr listnod...
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 使用棧 使用快慢指標找中點,原理是每次快指標走兩步,慢指標走一步,等快指標走完時,慢指標的位置就是中點。我們還需要用棧,每次慢指標走一步,都把值存入棧中,等到達中點時,鍊錶的前...