Given a singly linked list, determine if it is a palindrome.
Follow up:
Could you do it in O(n) time and O(1) space?
题解:获得链表一半的位置,再将其反转,最后2个半截的链表比较
public boolean isPalindrome(ListNode head) {
if(head == null || head.next == null)
return true;
ListNode fast=head,slow=head;
while(fast.next!=null && fast.next.next!=null ){ //slow走到一半的位置
slow = slow.next;
fast = fast.next.next;
}
ListNode font = head;
slow = reverseList(slow);
while(font!=null){ //两个指针比较
if(font.val != slow.val){
return false;
}
font = font.next;
slow = slow.next;
}
return true;
}
public ListNode reverseList(ListNode head){ //将后半截链表反转
ListNode temp = head.next,pre = head;
while(temp!=null){
ListNode r = temp.next;
temp.next = pre;
pre = temp;
temp = r;
}
head.next = null;
return pre;
}
参考: http://blog.youkuaiyun.com/brucehb/article/details/46837209