請(qǐng)編寫(xiě)一個(gè)函數(shù),檢查鏈表是否為回文。
給定一個(gè)鏈表ListNode* pHead,請(qǐng)返回一個(gè)bool,代表鏈表是否為回文。
測(cè)試樣例:
輸入:{1,2,3,2,1}
返回:true
輸入:{1,2,3,2,3}
返回:false
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Palindrome {
public:
bool isPalindrome(ListNode* pHead) {
// write code here
// 偶數(shù)個(gè)節(jié)點(diǎn)也可以是回文
ListNode *p1 = pHead, *p2 = pHead;
stack<int> stk;
while(p2->next){
stk.push(p1->val);
if(p2->next->next){
p2 = p2->next->next;
p1 = p1->next;
}else{
p2 = p2->next;
}
}
p1 = p1->next;
while(p1){
if(p1->val != stk.top()){
return false;
}
p1 = p1->next;
stk.pop();
}
return true;
}
};