// struct ListNode {
// int val;
// struct ListNode* next;
// ListNode(int x) : val(x), next(NULL) {}
// };
//寻找中间节点,快慢指针
struct ListNode*middleNode(struct ListNode*head)
{
struct ListNode*fast,*slow;
fast=head;
slow=head;
while(fast&&fast->next)
{
slow=slow->next;
fast=fast->next->next;
}
return slow;
};
//翻转链表
struct ListNode*reverse(struct ListNode*head)
{
if(head==nullptr||head->next==nullptr)//只有一个节点或链表为空
{
return head;
}
struct ListNode*n1,*n2,*n3;
n1=nullptr;
n2=head;
n3=n2->next;
while(n2)
{
n2->next=n1;
n1=n2;
n2=n3;
if(n3)//n3最先为空此时n2还没有为空没有出循环,不能对空指针n3解引用
n3=n3->next;
}
return n1;
};
class PalindromeList {
public:
bool chkPalindrome(ListNode* A) {
struct ListNode*mid=middleNode(A);
struct ListNode*rmid=reverse(mid);
while(A&&rmid)
{
if(A->val!=rmid->val)
{
return false;
}
A=A->next;
rmid=rmid->next;
}
return true;
}
};