c++ - 链表中的最长回文 C++

标签 c++ data-structures linked-list nodes palindrome

我想找出链表中是否存在回文,并打印该值。但问题是我正在使用长 int 值并希望在节点内找到回文甚至跨越节点。
IE 给定列表:123->32166->78->1222
最长的佩林应该是:123321
我已经尝试了很多东西,但我似乎无法理解如何去做。如果您不显示任何代码也没关系,但我很想听听解决此问题的任何想法。
我有一些想法: - 将节点放在一个数组中并尝试在其中找到一个 palin(尽管使用大量内存)
-反转列表并进行比较,但存在每个节点中具有不同大小的整数值的问题 也就是说,将 78 与 32166 进行比较是不明智的,它永远不会是真的
- 在 tail 和 head 处创建两个指针,如果两个值都为真,则一个一个地移动,但这也有很多问题。

一些代码:

    int palindrome()
    {
        // node *prev,*cur,*next;
        // cur=head;
        // prev=next=NULL;
        list obj1;
        node *s,*e;
        s=obj1.head;
        e=head;
        while(s && e)
        {
             while(s->data==e->data)
             {
                  e=e->next;
                  s=s->next;
                  cout<<"\n\n\n"<<e->data<<s->data;     
             }
             if(s->data!=e->data)
             {
                  e=e->next;
             }
        }

    }


最佳答案

声明一个字符串s。遍历链表并在每个节点处将那里的数字转换为字符串并将其附加到 s。遍历完成后,您可以使用 this O(n) 算法寻找s 的最长回文子串。

编辑:但请注意,您将获得的答案可能是从链表中数字的中间开始的。例如,如果您的链表是 2->36->661 那么它会给您 666 作为答案。如果您希望回文从链表中某个数字的开头开始,您必须在单独的列表中跟踪字符串中每个数字开头的索引,并将该列表用于中给出的算法链接。

关于c++ - 链表中的最长回文 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58570057/

相关文章:

string - 为什么 Haskell 的默认字符串实现是一个字符的链表?

C++ 重载基于 shared_ptr 派生类的函数

data-structures - 了解 Clojure 中的变量

c++ - 模数为哈希表中的地址创建错误的 int?

c - 段错误:11 error while implementing Doubly Linked List Data Structure

c++ - C++中的动态数组VS链表

复杂度为O(1)的单链表删除一个元素的算法

c++ - 迪尔德 : Symbol not found: _PyBaseObject_Type

c++ - 在 C++ 中找到 3 个数字中最小的

c++ - 将正则表达式编译成 native 程序集会比 PCRE 或其他正则表达式引擎更快吗?