2015-09-07 23 views
0

我需要创建一个链表,在其中输入如下所示:如何在Ruby中创建链表?

9 
5 
2.3 
8 
-1 

和输出应该是用逗号分隔的同一行列表的元素。

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

+4

是你的问题如何在Ruby中创建链表或如何打印它?你应该选择一个。 –

+0

问如何在Ruby中实现链表是一个非常大的问题,可能对于SO来说太大了。而且,关于这个问题已经写了大量的文章。你应该研究这个问题。你可能希望从这里开始(https://en.wikipedia.org/wiki/Linked_list),然后谷歌“Ruby链接列表”。 –

+0

在Ruby中实现链表没什么意义 - 与C数组不同,Ruby Array类可以容纳任意数量的元素,并且实现所有可以从列表中获得的接口,例如向前后添加元素或遍历它(# push,#unshift,#each) - 数组可以在任何基于列表的算法中使用。 – Borsunho

回答

1

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

class Node 
    attr_accessor :value 
    attr_accessor :next 
end 

,将创建Nodevaluenext getter/setter方法。

在C语言中,我们将使用value是Integer,并且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玩得开心!