我想找出链表中是否存在回文,并打印该值。但问题是我正在使用长 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/