/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
if(head==null) return true;
ListNode l1=firstList(head);
ListNode l2=reverse(l1.next);
ListNode p1=head;
ListNode p2=l2; //p2从l1.next开始反转
boolean result=true;
while(result&&p2!=null){ //p2快 result
if(p1.val!=p2.val) result =false; //此处
p1=p1.next;
p2=p2.next;
}
//保持不变
l1.next=reverse(l2);
return result;
}
//遍历
public ListNode firstList(ListNode l){ //同一起点出发,fast到最后slow到中间
ListNode slow=l;
ListNode fast=l;
while(fast.next!=null&&fast.next.next!=null){
slow=slow.next;
fast=fast.next.next;
}
return slow;
}
//反转
public ListNode reverse(ListNode l){
ListNode pre=null; //赋值
ListNode cur=l;
while(cur!=null){//cur先动
ListNode tmp=cur.next;
cur.next = pre; //连接起来
pre=cur;
cur=tmp;
}
return pre;//最后cur指向null
}
}