题目
请判断一个链表是否为回文链表。
示例 1:
输入: 1->2 输出: false
示例 2:
输入: 1->2->2->1 输出: true
答案
public boolean isPalindrome(ListNode head) {
if(head == null || head.next == null) return true;//空链表或者是一个元素直接返回true
ListNode slow = head, fast = head.next, pre = null, prepre = null;//定义指针一个在前一个在后
while(fast != null && fast.next != null) {//结束条件
//反转前半段链表
pre = slow;
slow = slow.next;
fast = fast.next.next;
//先移动指针再来反转
pre.next = prepre;
prepre = pre;
}
ListNode p2 = slow.next;
slow.next = pre;
ListNode p1 = fast == null? slow.next : slow;
while(p1 != null) {
if(p1.val != p2.val)
return false;
p1 = p1.next;
p2 = p2.next;
}
return true;
}