/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class PalindromeList {
public:
bool chkPalindrome(ListNode* A)
{
//思路2:利用快慢指针找到中间节点,然后逆置中间节点以及往后的节点,最后判断两个链表每个节点是否相等
struct ListNode*slow,*fast;
slow = fast = A;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
}
struct ListNode*tail = NULL;
struct ListNode*cur = slow;
while(cur)
{
cur = cur->next;
slow->next = tail;
tail = slow;
slow = cur;
}
while(tail && A)
{
if(tail->val == A->val)
{
tail = tail->next;
A = A->next;
}
else
{
return false;;
}
}
return true;
}
};