面试题02.06 回文链表(进阶)
分析
- 将链表从中间对半开,前半部分从后往前遍历,后半部分照常遍历,判断两者每一位上的值是否相等,若有一位不相等,则说明不是回文链表。
class Solution {
public boolean isPalindrome(ListNode head) {
if(head == null || head.next == null) return true;
int len = 0;
ListNode colon = head;
while(colon != null) {
colon = colon.next;
len++;
}
if(len == 2) return head.val == head.next.val;
ListNode pre = head;
ListNode mid = head.next;
ListNode cur = head.next.next;
pre.next = null;
for(int i = 1; i < len / 2; i++) {
mid.next = pre;
pre = mid;
mid = cur;
cur = cur.next;
}
if(len % 2 != 0) {
mid = cur;
}
while(pre != null && mid != null) {
if(pre.val != mid.val) return false;
pre = pre.next;
mid = mid.next;
}
return true;
}
}