class LinkedList
lista doblemente enlazada
Attributes
head[R]
attr
Public Class Methods
new(value, *more)
click to toggle source
initialize que crea una lista con tantos nodos como argumentos le pasemos
# File lib/prct06/LinkedList.rb, line 16 def initialize (value, *more) @head = Node.new(value) aux = @head more.each do |i| aux.next = Node.new(i, nil, aux) aux = aux.next end end
Public Instance Methods
access(pos)
click to toggle source
método que accede a los valores de cada nodo según el iterador pos
# File lib/prct06/LinkedList.rb, line 37 def access (pos) p = pos-1 aux = @head for i in 0..p-1 do aux = aux.next end return aux[:value] end
access_node(pos)
click to toggle source
método que accede a los nodos de la lista según el iterador pos
# File lib/prct06/LinkedList.rb, line 47 def access_node (pos) p = pos-1 aux = @head for i in 0..p-1 do aux = aux.next end return aux end
each() { |value| ... }
click to toggle source
invalidación de each para el correcto funcionamiento del módulo enumerable
# File lib/prct06/LinkedList.rb, line 118 def each aux = @head while aux != nil do yield aux.value aux = aux.next end end
length()
click to toggle source
método que devuelve el número de elementos en la lista
# File lib/prct06/LinkedList.rb, line 26 def length aux = @head cnt = 0 while aux != nil do aux = aux.next cnt = cnt + 1 end return cnt end
pop(pos)
click to toggle source
saca un elemento de la lista, eliminando el nodo, según el iterador p
# File lib/prct06/LinkedList.rb, line 58 def pop (pos) if pos == 1 then aux = @head @head = @head.next aux.prev = nil aux.next = nil return aux[:value] end p = pos-2 aux = @head for i in 0..p-1 do prev = aux aux = aux.next end popping = aux.next aux.next = popping.next (popping.next).prev = aux unless popping.next == nil return popping[:value] end
push(value, pos = 0)
click to toggle source
introduce un elemento en un nuevo nodo de la lista si no se especifica la posición deseada, hace push al final de la lista
# File lib/prct06/LinkedList.rb, line 81 def push (value, pos = 0) if pos == 0 then aux = @head for i in 0..length-2 do aux = aux.next end aux.next = Node.new(value, nil, aux) elsif pos == 1 then aux = @head @head = Node.new(value) @head.next = aux unless aux == nil else p = pos-2 aux = @head for i in 0..p-1 do aux = aux.next end save = aux.next aux.next = Node.new(value, save, aux) end end
push_multiple(*values)
click to toggle source
crea tantos nodos nuevos al final de la lista como elementos se pase como argumentos
# File lib/prct06/LinkedList.rb, line 105 def push_multiple (*values) aux = @head for i in 0..length-2 do aux = aux.next end values.each do |i| aux.next = Node.new(i, nil, aux) aux = aux.next end end
to_s()
click to toggle source
formateo a string de la lista completa
# File lib/prct06/LinkedList.rb, line 129 def to_s output = "{ " aux = @head while aux != nil do output << "#{aux[:value]} " aux = aux[:next] end output << "}" end