Ruby实现链表添加节点时出现NoMethodError错误如何解决?
问题原因
Ruby 类的实例变量默认为私有属性,不允许在类外直接进行读写操作。你定义的 Node 类仅在初始化方法中为 @data、@next 两个实例变量赋值,没有对外暴露对应的读写方法,因此在 LinkedList 类的 add 方法中执行 @head.next = temp、以及 printList 方法中读取 temp.data、temp.next 时,都会触发 NoMethodError 报错。
解决方案
在 Node 类中添加属性访问器,开放 data 和 next 两个实例变量的读写权限即可,修改后的 Node 类代码如下:
class Node # 开放data、next属性的读写权限 attr_accessor :data, :next def initialize data @data = data @next = nil end end
修改后重新运行代码,会按头插法的逻辑依次输出 3、2、1,符合当前代码的设计预期。
内容的提问来源于stack exchange,提问作者Shiv
相关产品推荐
相关产品推荐

