【问题标题】:check palindrome in a SINGLY link list [duplicate]检查单链表中的回文[重复]
【发布时间】:2012-08-10 23:08:14
【问题描述】:

可能重复:
Single Linked List is Palindrome or not

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

例如a-b-c-b-a

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

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

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

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

【问题讨论】:

  • 您可以首先编辑您的问题以删除所有大写字母。你不需要在这里大喊大叫,你看……人们可以阅读。如果您想突出显示某些内容,请使用粗体或类似的东西。
  • @Aftnix 什么?你说什么?

标签: c list data-structures hyperlink


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你能创建临时数组吗?将链表中的所有项放入一个数组中,然后将索引 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);
    

    【讨论】:

    • ...不要忘记考虑奇数长度的数组。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2016-10-08
      • 2017-12-11
      • 1970-01-01
      相关资源
      最近更新 更多