public boolean isPail (ListNode head) {
ListNode pre = head, cur = head;
//求中点并进行反转后对比
while (cur != null && cur.next != null) {
cur = cur.next.next;
pre = pre.next;
}
ListNode newHead = reverse(pre, cur);
return isSame(head, newHead);
}
//翻转链表
private ListNode reverse(ListNode head, ListNode tail) {
ListNode pre = null, cur = head;
while (cur != tail) {
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
//判断是否相等
private boolean isSame(ListNode head1, ListNode head2) {
while (head1 != null && head2 != null) {
if (head1.val != head2.val) return false;
head1 = head1.next;
head2 = head2.next;
}
return true;
}