class Solution {
public:
bool isPalindrome(ListNode* head) {
ListNode* first = head;
ListNode* second = head;
while(first != NULL && first->next != NULL){
first = first->next->next;
second = second->next;
}
if(first != NULL){
second = second->next;
}
ListNode* right = reverse(second);
while(right != NULL){
if(right->val != head->val)
return false;
right = right->next;
head = head->next;
}
return true;
}
ListNode* reverse(ListNode* head){
ListNode* cur = head;
ListNode* pre = NULL;
ListNode* nxt = NULL;
while(cur != NULL){
nxt = cur->next;
cur->next = pre;
pre = cur;
cur = nxt;
}
return pre;
}
};