我试图在Ruby中实现单链接的LinkedList,并且我在尝试弄清楚为什么某些节点正在消失时遇到了一些麻烦。这就是我到目前为止所拥有的:
class Node
attr_accessor :data, :next
def initialize(data)
@data = data
end
end
class LinkedList
attr_accessor :head
def insert(data)
node = Node.new(data)
if @head.nil?
@head = node
else
travel = @head
unless travel.next.nil?
travel = travel.next
end
travel.next = node
end
print @head
end
def to_string
result = ""
travel = @head
unless travel.nil?
result << "#{travel.data} => "
travel = travel.next
end
result << "END"
result
end
end
这是对这堂课的一次调用:
list = LinkedList.new
list.insert(5)
list.insert(6)
list.insert(7)
在插入结束时,我打印出@head
,我可以看到所有三个节点都在列表中。但是,当我单独调用to_string
时,@head
只有第一个节点,但其他一切都消失了。任何人都能指出我正确的方向指出错误吗?
谢谢!
答案 0 :(得分:5)
关键字unless
存在问题。在ruby中,它是一个条件语句,就像if
一样。它不是一个循环。只需使用关键字until
替换它们。
关于链接列表一般来说,它的目的是在O(1)中进行插入,而在O(n)中进行插入(遍历列表并在末尾插入节点)。相反,您只需在开头插入新节点即可。
最后,ruby的约定是命名to_string方法to_s
,因此在打印列表时会调用它。
此外,您可以将Node
作为LinkedList
的内部类。如果要实现其他基于节点的数据结构(deque,ring,tree等)