0

可能重复:
单链表是否为回文

假设我有一个包含 char 项的链接列表,我需要查找该链接列表中的字符是否为回文。我知道链接列表根本不是一个合适的结构,但是如果我们有一个怎么办?

例如a-b-c-b-a

双向链表很简单,我们可以从头尾开始

ptrh=head ptrt=tail
if(ptrh->item==ptrt->item)

ptrh->ptrh->frwdlink
ptrt->ptrt->bcklink

但是如果我们有一个单链表呢?那怎么实现呢?

4

3 回答 3

4

知道列表的大小,您就可以知道中间是什么。然后,当您浏览时,您只需将所有字符缓存到中间,并确保它们在中间之后以相反的顺序出现。

于 2012-08-10T23:11:36.987 回答
3

你可以创建临时数组吗?将链表中的所有项放入一个数组中,然后将索引 n 与索引 (length - n) 进行比较。

var ptr = head; var array = [];

while (ptr != null)
{
  array.push(ptr.item);
  ptr = ptr.next;
}

for (var i = 0; i < array.length / 2; i++)
{
  if (array[i] != array[array.length - i])
    return (false);
}

return (true);
于 2012-08-10T23:16:35.800 回答
2

您可以在第一次浏览列表时构建一个节点顺序相反的列表。

然后比较原始列表和倒排列表的前 n/2+1 个节点

于 2012-08-10T23:15:04.140 回答