用ArrayList类型的数组解法:
class Solution {
public boolean isPalindrome(ListNode head) {
ArrayList<Integer> list = new ArrayList<>();
ListNode cur = head;
while(cur!=null){
list.add(cur.val);
cur = cur.next;
}
int front = 0;
int back = list.size()-1;
while(front<back){
if(!list.get(front).equals(list.get(back))){
return false;
}
front++;
back--;
}
return true;
}
}
用快慢双指针方法:
这个方法
slow = slow.next;
fast = fast.next.next;
cur.next = pre;
pre = cur;
cur = slow;
这五行代码一定要在纸上实施一遍再去确定最后while遍历用的是pre还是cur
偶数个最后一次遍历之后的情况
奇数个最后一次遍历之后的情况
class Solution {
public boolean isPalindrome(ListNode head) {
if(head == null||head.next == null){
return true;
}
ListNode pre = null, cur = head;
ListNode fast = head, slow = head;
while(fast != null&&fast.next != null){
slow = slow.next;
fast = fast.next.next;
cur.next = pre;
pre = cur;
cur = slow;
}
if(fast!=null){
slow = slow.next;
}
while(slow != null&&pre != null){
if(slow.val != pre.val){
return false;
}
pre = pre.next;
slow = slow.next;
}
return true;
}
}