这是关于LeetCode的第234个问题。该任务的要求是在O(n)时间和O(1)空间中进行。 单链表的定义:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
如果我写这样的函数:
public class Solution {
public boolean isPalindrome(ListNode head) {
List<Integer> a = new ArrayList<>();
while(head!=null){
a.add(head.val);
head = head.next;
}
for(int i=0, j=a.size()-1-i; i<j;){
if(a.get(i) != a.get(j)){
return false;
}
i++;
j--;
}
return true;
}
}
如果我尝试[128,128],这将返回false,但如果我尝试[127,127]它将返回true。我真的不知道为什么。有人能帮助我吗?
答案 0 :(得分:0)
您正在递减循环计数器,但将其与您的位置计数器进行比较。换句话说,while i<j
只会通过列表的一半。
所以,
for( int i=0, j=a.size()-1; i<j ; ++i,--j ) {
if ( a.get(i) != a.get(j) ) return false;
}
return true;
或者,有点混淆。
int i=0, j=a.size()-1;
while ( j > i && s[i] == s[j] ) { ++i; --j; }
return j<=i;