思路:找到中点,逆转后半部分链表,然后与前半部分进行比对
找到中点可以使用快慢指针的方式,快指针走两步,慢指针走一步
/**
* 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 || head.next == null){
return true;
}
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null){
fast = fast.next.next;
slow = slow.next;
}
slow = reverse(slow);
fast = head;
while(slow != null){
//System.out.println(p1.val + " : " + p2.val);
if(slow.val != fast.val){
return false;
}
fast = fast.next;
slow = slow.next;
}
return true;
}
public ListNode reverse(ListNode head){
ListNode pre = null;
ListNode next = null;
while(head != null){
next = head.next;
head.next= pre;
pre = head;
head = next;
}
return pre;
}
}