是一个单一链接列表回文? JAVA

时间:2016-03-16 20:16:28

标签: java palindrome

这是关于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。我真的不知道为什么。有人能帮助我吗?

1 个答案:

答案 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;