【问题标题】:'pop' method in RubyRuby 中的“pop”方法
【发布时间】:2017-12-09 20:19:33
【问题描述】:

我创建了一个“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

我的问题是如何返回被删除内容的值,以及如何从链接列表中删除值。

【问题讨论】:

  • 请记住,在 Ruby 中逻辑错误的唯一事物是 nilfalse,所以除非您在列表中期望文字 false,否则 if current_node.next_node 是正确的方式来表达。你也可以current_node &amp;&amp;= current_node.next_node
  • 你有什么问题?

标签: ruby linked-list stack nodes


【解决方案1】:
until current_node.next_node == nil
    current_node = current_node.next_node
end

当该循环结束时,current_node 指向最后一个节点(下一个节点为 `nil 的节点)。

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

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

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

您可以查看这个相关问题(不是特定于 Ruby 的)以了解有关算法的想法。

Linked List implementation for a stack

作为旁注,其中一个答案将其实现为使pop 删除列表的第一个节点(并且push 将节点添加到开头),这使得它更容易(并且更快,因为您不会每次都遍历整个列表)。

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2018-09-01
    • 2023-02-07
    • 2011-03-16
    • 2017-03-01
    • 1970-01-01
    • 2019-04-14
    • 2013-03-31
    • 2020-07-18
    相关资源
    最近更新 更多