【问题标题】:How to create a linked list in Ruby?如何在 Ruby 中创建链表?
【发布时间】:2015-09-07 21:47:53
【问题描述】:

我需要创建一个链表,其中的输入如下所示:

9
5
2.3
8
-1

并且输出应该是列表的元素在同一行,用逗号分隔。

基本上我知道我必须创建 2 个类,一个名为“Linked List”的类代表整个列表,一个名为“Node”的类代表列表的每个元素,但我完全迷失了,我没有甚至不知道如何将每个元素“保存”在不同的节点中,我以前从未处理过动态数据结构。任何帮助将不胜感激

【问题讨论】:

  • 您的问题是如何在 Ruby 中创建一个链表,或者如何打印它?你应该选择一个。
  • 询问如何在 Ruby 中实现链表是一个非常大的问题,对于 SO 来说可能太大了。此外,已经有大量关于该主题的文章。你应该研究这个主题。您可能希望开始here,然后谷歌“Ruby 链表”。
  • 在 Ruby 中实现链表没什么意义 - 与 C 数组不同,Ruby Array 类可以容纳任意数量的元素,并实现了可以从列表中获得的所有接口,例如在前面添加元素和返回或遍历它(#push、#unshift、#each) - 数组可用于任何基于列表的算法。
  • 我知道这是一个老问题,但如果有人仍然对这个主题感兴趣,这里有一篇文章展示了如何在 Ruby 中实现链表(实际上是关于“掌握" Ruby 中的数据结构)medium.com/amiralles/…
  • @AlejandroMiralles 我如何使用 LInkedList stackoverflow.com/questions/52567549/… 实现它

标签: ruby linked-list nodes


【解决方案1】:

Ruby 通过引用存储Objects(类的实例),并通过值存储文字值(整数、符号等)。所以如果你想要整数的链表,你只需要将它们包装到类中。

class Node
  attr_accessor :value
  attr_accessor :next
end

这将使用valuenext getter/setter 方法创建类Node

在 C 语言中,我们将使用 value 是整数,next 是“指向节点的指针”。请注意,我们不需要预先指定类型,因为 Ruby 是动态语言。此外,不需要显式的“获取指针”操作,因为正如我上面所说,Ruby 会自动通过引用传递对象。

node1 = Node.new
node1.value = -1

node2 = Node.new
node2.value = 8
node2.next = node1

这将创建node2 -> node1 链表。

现在,参考node2,您可以遍历所有链表:

node = node2
while(node) do
  puts node.value
  node = node.next
end
# Prints:
# 8
# -1

您的问题没有任何宽泛或复杂的内容。这是基本的。与 Ruby 一起玩得开心!

【讨论】:

  • 简约而全面的解决方案:)
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多