class Lista

Representación de una lista doblemente enlazada de nodos

Attributes

head[R]
tail[R]

Public Instance Methods

each() { |value| ... } click to toggle source

Método para la enumeración de los nodos de la lista

@return [Node] devuelve los nodos que conforman la lista

# File lib/pr06/lista_d.rb, line 94
def each
    x = @head
    while(x != nil)
        yield x.value
        x = x.next
    end
end
pop_head() click to toggle source

Extracción del primer nodo de la lista

@return [any, nil] devuelve el valor guardado en el primer nodo o nil si no hay nodos en la lista

# File lib/pr06/lista_d.rb, line 56
def pop_head()
    if(@head == nil)
        return nil
    end
    
    x = @head
    @head = @head.next
    if(@head == nil)
        @tail = nil
    else
        @head.prev = nil
        x.next = nil
    end
    x.value
end
pop_tail() click to toggle source

Extracción del último nodo de la lista

@return [any, nil] devuelve el valor guardado en el último nodo o nil si no hay nodos en la lista

# File lib/pr06/lista_d.rb, line 75
def pop_tail()
    if(@tail == nil)
        return nil
    end
    
    x = @tail
    @tail = @tail.prev
    if(@tail == nil)
        @head = nil
    else
        @tail.next = nil
        x.prev = nil
    end
    x.value
end
push(x) click to toggle source

Inserción por la cola de la lista de varios nodos @param [Array<any>] x valores de los nuevos nodos

@return [Node] Devuelve el tail

# File lib/pr06/lista_d.rb, line 47
def push(x)
    x.each{
        |i| push_tail(i)
    }
end
push_head(x) click to toggle source

Inserción por la cabeza de la lista @param [any] x valor del nuevo nodo

@return [Node] Devuelve el head

# File lib/pr06/lista_d.rb, line 15
def push_head(x)
    if(@head == nil)
        @head = Node.new(x, nil, nil)
        @tail = @head
    else
        nuevo = Node.new(x, nil, nil)
        nuevo.next= @head
        @head.prev = nuevo
        @head = nuevo
    end
end
push_tail(x) click to toggle source

Inserción por la cola de la lista @param [any] x valor del nuevo nodo

@return [Node] Devuelve el tail

# File lib/pr06/lista_d.rb, line 31
def push_tail(x)
    if(@tail == nil)
        @tail = Node.new(x, nil, nil)
        @head = @tail
    else
        nuevo = Node.new(x, nil, nil)
        nuevo.prev = @tail
        @tail.next = nuevo
        @tail = nuevo
    end
end