/*
思路: 1.找到中间点 2.以中间点开始翻转整个后面的list;3.以第二个list为限度 对比两个list 得出结果;
*/
/**
* Definition for ListNode
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* @param head: A ListNode.
* @return: A boolean.
*/
public boolean isPalindrome(ListNode head) {
if(head == null || head.next == null) return true;
// write your code here
ListNode slow = head, fast = head;
while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
ListNode node = reverse(slow);
while(node != null) {
if(node.val != head.val) return false;
node = node.next;
head = head.next;
}
return true;
}
public ListNode reverse(ListNode node) {
ListNode head = null;
while(node != null) {
ListNode temp = node.next;
node.next = head;
head = node;
node = temp;
}
return head;
}
}