class NutritionalCalculator::LinkedList
Clase que representa a una lista doblemente enlazada.
Constants
- Node
Estructura que representa a un nodo de la lista enlazada.
Public Class Methods
Constructor que inicializa una lista vacía.
# File lib/nutritional_calculator/linkedlist.rb, line 15 def initialize # Atribute that represents the head # of the list. @head = nil # Atribute that represents the tail # of the list. @tail = nil end
Public Instance Methods
Método que accede a un elemento dada su posición en la lista. @param pos [number] Posición del elemento en la lista. @return [value,nil] Elemento que se encuentra en la posición pos.
# File lib/nutritional_calculator/linkedlist.rb, line 147 def [] (pos) current_node = @head i = 0 while current_node and i != pos current_node = current_node.next i += 1 end if current_node current_node.value else nil end end
Método que accede al último elemento de la lista. @return [value, nil] Último elemento de la lista.
# File lib/nutritional_calculator/linkedlist.rb, line 135 def back if @tail @tail.value else nil end end
Método que pasa a cada elemento de la lista un bloque para que se ejecute.
# File lib/nutritional_calculator/linkedlist.rb, line 164 def each current_node = @head while current_node yield current_node.value current_node = current_node.next end end
Método que busca la primera ocurrencia de un elemento en la lista y lo elimina. @param value [value] [value] Valor que pretendemos eliminar.
# File lib/nutritional_calculator/linkedlist.rb, line 97 def erase(value) if @head and @head.value == value pop_front elsif @tail and @tail.value == value pop_back else current_node = @head while current_node if current_node.value == value current_node.prev.next = current_node.next current_node.next.prev = current_node.prev end current_node = current_node.next end end end
Método que accede al valor del primer elemento de la lista. @return [value, nil] Primer elemento de la lista.
# File lib/nutritional_calculator/linkedlist.rb, line 124 def front if @head @head.value else nil end end
Método que inserta un conjunto de valores por la parte posterior de la lista. @param values [value] conjunto de elementos que queremos insertar en la lista.
# File lib/nutritional_calculator/linkedlist.rb, line 59 def insert(*values) values.each do |value| push_back(value) end end
Método que extrae el último elemento posterior de la lista
# File lib/nutritional_calculator/linkedlist.rb, line 69 def pop_back if @head == @tail @head = @tail = nil else if @tail @tail = @tail.prev @tail.next = nil; end end end
Método que extrae el primer elemento de la lista.
# File lib/nutritional_calculator/linkedlist.rb, line 82 def pop_front if @head == @tail @head = @tail = nil else if @head @head = @head.next @head.prev = nil; end end end
Método que inseta un valor por la parte posterior de la lista. @param value [value] Valor que queremos insertar.
# File lib/nutritional_calculator/linkedlist.rb, line 31 def push_back(value) if @head == nil @head = Node.new(value, nil, nil) @tail = @head else current_node = Node.new(value, nil, @tail) @tail.next = current_node @tail = current_node end end
Método que inseta un valor por la parte delantera de la lista. @param value [value] Valor que queremos insertar.
# File lib/nutritional_calculator/linkedlist.rb, line 45 def push_front(value) if @head == nil @head = Node.new(value, nil, nil) @tail = @head else current_node = Node.new(value, @head, nil) @head.prev = current_node @head = current_node end end
Método que transforma el objeto en un String. De esta forma será formateado por pantalla. @return [String] String con el objeto formateado.
# File lib/nutritional_calculator/linkedlist.rb, line 176 def to_s list_as_string = "" current_node = @head while current_node list_as_string += "#{current_node.value}" if current_node.next list_as_string += " <-- " end current_node = current_node.next end list_as_string end