私はRubyを学んでいる途中で、練習として連結リストクラスを作っています。双方向リンク リストの削除メソッドを作成中です。私の質問は、リストをヘッドノードで表す場合、ヘッドを削除するにはどうすればよいですか? Ruby では self 変数への割り当てが許可されていないようです。そのため、呼び出し元の参照を次のノードに変更することはできません。解決策の 1 つは、次のノードからキーをコピーして参照を交換することですが、一般的に、Ruby で呼び出し元の参照を変更する方法はありますか?
class LinkedListNode
attr_accessor :next, :previous, :key
def initialize(key=nil, next_node=nil, previous=nil)
@next = next_node
@previous = previous
@key = key
end
def append(key=nil)
newnode = LinkedListNode.new(key)
seeker = self
while seeker.next != nil
seeker = seeker.next
end
newnode.previous = seeker
seeker.next = newnode
end
def delete(key=nil)
seeker = self
while seeker.key != key
return if seeker.next == nil
seeker = seeker.next
end
if seeker.previous != nil
if seeker.next != nil
seeker.previous.next = seeker.next
seeker.next.previous = seeker.previous
else
seeker.previous.next = nil
end
else
return self = self.next
end
return seeker = nil
end
def print
seeker = self
string = ""
while 1
if seeker.next == nil
string += seeker.key.to_s
break
else
string += seeker.key.to_s + " -> "
end
seeker = seeker.next
end
puts string
end
end
if __FILE__ == $0
ll = LinkedListNode.new(1)
ll.append(2)
ll.append(3)
ll.append(4)
ll.append(5)
ll.print
ll.delete(5)
ll.print
ll.delete(1)
ll.print
end