/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
typedef struct ListNode ListNode;
ListNode* findnode(ListNode* A)
{
ListNode* fast = A,*slow = A;
while(fast->next && fast)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
ListNode* reverse(ListNode* mid)
{
ListNode* m1 = NULL;
ListNode* m2 = mid;
ListNode* m3 = mid->next;
while(m3)
{
m2->next = m1;
m1 = m2;
m2 = m3;
m3 = m3->next;
}
return m2;
}
bool chkPalindrome(ListNode* A) {
ListNode* mid = findnode(A);
ListNode* rmid = reverse(mid);
while(rmid && A)
{
if(rmid ->val != A->val)
{
return false;
}
rmid = rmid->next;
A = A->next;
}
return true;
}
};