私は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