思路:
官方的题解是,先用快慢指针找到中点,然后再将后半部分链表反转。再从两头开始遍历,当不相等的时候就不是回文链表。
我的方法是直接转为一个数组,然后找到中点,用中心扩展法来判断。
这两个方法的核心都是要先找到中点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public boolean isPalindrome(ListNode head) {
if(head==null)
return false;
ArrayList<Integer> list = new ArrayList<>();
ListNode p = head;
while(p!=null)
{
list.add(p.val);
p = p.next;
}
int left = list.size()/2;
int right = (list.size()%2==0)?left-1:left;
while(left>=0&&right<list.size())
{
//System.out.println(left+" "+right);
int l = list.get(left);
int r = list.get(right);
if(l!=r)
return false;
left--;
right++;
}
return true;
}
}