问题描述
所以,我正在解决这个在链表中检测回文的问题。我想出了以下解决方案:
class Solution {
public boolean ispalindrome(ListNode head) {
ListNode temp=head;
boolean [] arr = new boolean[10];
int count=0;
if(head==null) return false;
while(temp!=null)
{
if(arr[temp.val]==false)
arr[temp.val]=true;
else
arr[temp.val]=false;
temp=temp.next;
}
for(int i=0;i<10;i++)
{
if(arr[i]==true)
count++;
}
if(count<2)return true;
return false;
}
现在,就我所见,此解决方案背后的逻辑是正确的,但在以下情况下失败:[1,0]、[4,0] 等。我该怎么做克服这个? (请不要用更短的方法回复我想知道为什么在某些情况下会失败。)
解决方法
首先欢迎使用 StackOverflow!
因为这个问题的解决方案是多么简单,我觉得有必要告诉你,一个带有辅助堆栈的解决方案不仅易于实现,而且易于理解。但是既然你问为什么你的代码在某些情况下会失败,我会先回答这个问题。特别是您的代码正在计算奇数位数。
虽然这似乎是您检测回文应该做的事情,但请注意,看起来像 1 -> 1 -> 0 -> 0 的链表在您的代码下也被认为是回文,因为计数总是在进行小于 0。
您的解决方案用于告诉我们是否可以在给定一组数字的情况下创建回文。假设问题就像“给定一个链表,告诉我你是否可以重新排列它以创建回文”,但它不适用于“这个链表是回文吗”。