# Deque class class Deque def initialize @front = nil @back = nil end def push(data) element = Element.new(data) element.prev = @back @back.next = element if @back @back = element @front = element if @front.nil? end def pop element = @back @back = element.prev @front = nil if @back.nil? element.data end def unshift(data) element = Element.new(data) element.next = @front @front.prev = element if @front @front = element @back = element if @back.nil? end def shift element = @front @front = element.next @back = nil if @front.nil? element.data end end # Element class class Element attr_accessor :data, :next, :prev def initialize(data) @data = data @next = nil @prev = nil end end