微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用于检测链表中回文的代码涵盖所有情况?

如何解决如何使用于检测链表中回文的代码涵盖所有情况?

所以,我正在解决这个在链表中检测回文的问题。我想出了以下解决方案:

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。

您的解决方案用于告诉我们是否可以在给定一组数字的情况下创建回文。假设问题就像“给定一个链表,告诉我你是否可以重新排列它以创建回文”,但它不适用于“这个链表是回文吗”。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。