QUESTION:
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?
EXPLANATION:
其实我一开始的想法只是说一个字符串,一个在后面不停的添加,一个在前面不停的添加,最后判断两个字符串是否相等。这样的话只要有一个循环就可以了也就是O(n)但是没想到的是判断两个字符串是否相等是一个相当耗时的操作。
后来就做了下面的解题方法,复杂度其实是 n+n/2,算下来时间复杂度其实也是O(n)。
SOLUTION:
public class Solution {
public boolean isPalindrome(ListNode head) {
ArrayList<Integer> list = new ArrayList<>();
while (head!=null){
list.add(head.val);
head = head.next;
}
int pre =0;int afrer = list.size()-1;
while (pre<afrer){
int a = list.get(pre);
int b = list.get(afrer);
if(a!=b)
return false;
pre++;
afrer--;
}
return true;
}
}