RosettaCodeData/Task/Doubly-linked-list-Element-definition/Ruby/doubly-linked-list-element-definition.rb
2023-07-01 13:44:08 -04:00

20 lines
441 B
Ruby

class DListNode < ListNode
attr_accessor :prev
# accessors :succ and :value are inherited
def initialize(value, prev=nil, succ=nil)
@value = value
@prev = prev
@prev.succ = self if prev
@succ = succ
@succ.prev = self if succ
end
def self.from_values(*ary)
ary << (f = ary.pop)
ary.map! {|i| new i }
ary.inject(f) {|p, c| p.succ = c; c.prev = p; c }
end
end
list = DListNode.from_values 1,2,3,4