Given a singly linked list, determine if it is a palindrome.
翻译:给定一个单链表,确定它是否是回文。
思路:一开始的思路不是很清晰,觉得比较复杂,后来看了答案,思路差不多。就是先算链表的长度,再把链表从中间分成两部分,把后半部分反转,再对比两个链表。
public boolean isPalindrome(ListNode head) {
int len = 0;
ListNode begin = head;
if(head == null) return true;
while(head != null){
head = head.next;
len++;
}
int len_half = len/2;
ListNode mid =begin;
int j = 1;
while(j<=len_half){
mid = mid.next;
j++;
}
ListNode pre = null;
while(mid != null){
ListNode next = mid.next;
mid.next = pre;
pre = mid;
mid = next;
}
while(pre != null){
if(pre.val != begin.val) return false;
pre = pre.next;
begin = begin.next;
}
return true;
}