得到链表后半段的首地址,然后翻转,然后依次比较即可。
ListNode* reverseList(ListNode* head){
ListNode * pre = NULL;
while(head){
ListNode *tmp = head->next;
head->next = pre;
pre = head;
head = tmp;
}
return pre;
}
bool isPalindrome(ListNode* head) {
if(!head||!head->next) return true;
ListNode* fast;
ListNode* slow;
fast = slow = head;
while(fast&&fast->next){
slow = slow->next;
fast = fast->next->next;
}
if(fast){
slow = slow->next;
}
slow = reverseList(slow);
while(slow){
if(head->val != slow->val) return false;
head = head->next;
slow = slow->next;
}
return true;
}