题目描述

思路
- 快慢指针找链表中点
- 翻转后半部分(奇偶情况分析)
- 后半部分和前半部分比较

代码
class Solution {
public boolean isPalindrome(ListNode head) {
ListNode dummy = new ListNode();
dummy.next = head;
ListNode fast = head, slow = head, pre = dummy;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
pre = pre.next;
}
pre.next = null;
pre = null;
ListNode cur = slow;
while (cur != null) {
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
ListNode newHead = pre;
while (head != null && newHead != null) {
if (head.val != newHead.val) {
return false;
}
head = head.next;
newHead = newHead.next;
}
return true;
}
}