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?
Subscribe to see which companies asked this question
空间复杂度O(n)的思路很容易就能想到。
O(1)的情况的话,其实和reverse LinkedList并没什么区别了。
所以说以前做过的题,一定要头脑清晰啊!
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isPalindrome(ListNode head) {
int count = 1;
ListNode node = head;
if (head == null || head.next == null)
return true;
while(node.next != null){
count++;
node = node.next;
}
ListNode mid = head;
for(int i = 0; i < count/2; i++){
mid = mid.next;
}
mid = reverse(mid);
for(int i = 0; i < count/2; i++){
if (head.val != mid.val)
return false;
else{
head = head.next;
mid = mid.next;
}
}
return true;
}
public ListNode reverse(ListNode head){
ListNode prev = null;
while(head != null){
ListNode next = head.next;
head.next = prev;
prev = head;
head = next;
}
return prev;
}
}
中国男乒加油!