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