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

new() click to toggle source

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

[](pos) click to toggle source

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
back() click to toggle source

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
each() { |value| ... } click to toggle source

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
erase(value) click to toggle source

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
front() click to toggle source

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
insert(*values) click to toggle source

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
pop_back() click to toggle source

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
pop_front() click to toggle source

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
push_back(value) click to toggle source

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
push_front(value) click to toggle source

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
to_s() click to toggle source

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