// 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; } };