题目描述
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
出处
思路
首先计算链表长度n,然后拿一个数组存前n/2项,若n为奇数则略过第n/2+1项,随后对链表后n/2项遍历,与数组内容比对即可。
代码
class Solution {
public:
bool isPalindrome(ListNode* head) {
vector<int> stack;
int n=0;
ListNode* p=head;
while(p!=nullptr) {
p=p->next;
n++;
}
p=head;
for(int i=0; i<n/2; i++){
stack.push_back(p->val);
p=p->next;
}
if(n%2==1)
p=p->next;
for(int i=n/2-1; i>=0; i--){
if(p->val!=stack[i])
return false;
p=p->next;
}
return true;
}
};