C 检查单个链接列表中的回文

C 检查单个链接列表中的回文,c,list,data-structures,hyperlink,C,List,Data Structures,Hyperlink,可能重复: 假设我有一个包含char项的链接列表,我需要找出该链接列表中的字符是否是回文。我知道链接列表根本不是一个合适的结构,但是如果我们有一个链接列表怎么办 例如a-b-c-b-a 双链接列表很容易,我们可以从开头和结尾开始 ptrh=head ptrt=tail if(ptrh->item==ptrt->item) 及 但是如果我们有一个单一的链表呢?那么如何实现它呢?知道列表的大小,就可以知道中间是什么。然后,在浏览时,只需将所有字符缓存到中间,并确保它们以相反的顺序出现

可能重复:

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

例如
a-b-c-b-a

双链接列表很容易,我们可以从开头和结尾开始

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


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

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

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


然后比较原始列表和反向列表的前n/2+1节点

能否创建临时数组?将链表中的所有项目放入一个数组中,然后将索引n与索引(长度-n)进行比较

var ptr=水头;var数组=[];
while(ptr!=null)
{
数组推送(ptr.item);
ptr=ptr.next;
}
对于(变量i=0;i
您可以从编辑问题开始删除所有大写字母。你不需要在这里大喊大叫,你看……人们可以阅读。如果你想突出显示一些东西,用粗体或类似的东西。@Aftnix什么?你说什么?…别忘了考虑奇数长度的数组。
ptrh->ptrh->frwdlink
ptrt->ptrt->bcklink
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);