require "dieta/dieta_m" module Lista # @attr [Object] value Objeto contenido en el nodo # @attr [Node] next Nodo siguiente # @attr [Node] prev Nodo previo Node = Struct.new(:value, :next, :prev) class MD_list include Enumerable # Variable que almacena la nodo cabeza (primero) de la lista attr_accessor :head # Variable que almacena la nodo cola (final) de la lista attr_accessor :tail # Inicializa la lista def initialize() @head = nil @tail = nil end # Extrae el primer nodo def extract_first nodo = @head if nodo != nil if nodo.next != nil @head = nodo.next else @head = nil @tail = nil end end nodo end # Inserta un nodo # @param node el nodo que quieras insertar def insert(node) if @head == nil @head = node elsif node.prev = @tail @tail.next = node end @tail = node end # Extrae el Ășltimo elemento de la lista def extract_end nodo = @tail if nodo != nil if nodo.prev != nil @tail = nodo.prev @tail.next = nil else @head = nil @tail = nil end end nodo end # Itera en la lista def each i = @head; while i != nil yield i.value i = i.next end end end end