![]()
1 ListNode* ReverseList(ListNode *p) {
2 if (p == NULL || p->next == NULL)
3 return p;
4
5 ListNode *pre = NULL;
6 ListNode *next = p->next;
7 while (p) {
8 p->next = pre;
9 pre = p;
10 p = next;
11 next = p ? p->next : NULL;
12 }
13 return pre;
14 }
15
16 bool isPalindrome(ListNode* head) {
17 if (head == NULL || head->next == NULL)
18 return true;
19 ListNode *slow = head, *fast = head;
20 while (fast->next && fast->next->next) {
21 slow = slow->next;
22 fast = fast->next->next;
23 }
24 slow->next = ReverseList(slow->next);
25 slow = slow->next;
26
27 while (slow) {
28 if (slow->val != head->val)
29 return false;
30 slow = slow->next;
31 head = head->next;
32 }
33 return true;
34 }