2017-07-06 112 views
0

我创建了一个'pop'方法将最后一个节点从链表中取出。但是,我收到的问题是它不会删除节点,它只是告诉我应该删除的节点中的数据。Ruby中的'pop'方法

我应该用我使用测试驱动开发的前言,测试写成'assert_equal“blop”,list.pop。 “blop”是最后一个节点的值。很好,我得到了我的方法告诉我,但它仍然不会删除节点。

def pop 
@count -= 1 
return_string = "" 
current_node = @head 
until current_node.next_node == nil 
    current_node = current_node.next_node 
end 
return_string << current_node.data + " " 
return_string.strip 
current_node.next_node = Node.new(data) 
end 

我的问题是我怎么回的精选被删除什么价值,以及,从链表删除值。

+0

请记住,在Ruby中唯一的逻辑错误是'nil'和'false',所以除非你在列表中预期字面值为'false',那么'如果current_node.next_node'是表达方式那。你也可以做'current_node && = current_node.next_node'。 – tadman

+0

你的问题是什么? – sawa

回答

0
until current_node.next_node == nil 
    current_node = current_node.next_node 
end 

当该循环结束,current_node指向最后一个节点(对于该下一个节点是`为零的节点)。

这就是你应该删除的节点,但是为了删除那个节点,你应该将前一节点的next_node指向nil

但是,在那时您没有对前一个节点的引用。

您可以有另一个变量来跟踪previous节点,以便您可以在退出循环后将其删除。

你可以检查这个相关的问题(不是特定的Ruby)的算法的想法。

Linked List implementation for a stack

作为一个侧面说明,对一个问题的答案的一个实现此为使pop删除列表中的第一个节点(和push节点添加到开头),这使得它更容易(和更快,因为你不会每次都浏览整个列表)。