class List

require “./node.rb”

create a Struct with :value and :next

Attributes

end[R]
front[R]
size[R]

Public Class Methods

new(value = nil) click to toggle source
# File lib/biblio/list.rb, line 9
def initialize(value = nil)
    @size = 0
    @front = Node.new(nil, nil, nil)
    @end = @front
    
    if value != nil
        push_front(value)
    end
end

Public Instance Methods

clear() click to toggle source
# File lib/biblio/list.rb, line 126
def clear
    @size = 0
    @front = Node.new(nil, nil, nil)
    @end = @front
end
each() { |value| ... } click to toggle source
# File lib/biblio/list.rb, line 117
def each
    return nil unless @size > 0
    aux = @front
    until aux.nil?
        yield aux.value
        aux = aux.next
    end
end
get_pos(position) click to toggle source
# File lib/biblio/list.rb, line 101
def get_pos(position)
    if position < @size
        aux = @front
        if position > 0
            i = 0
            while i < position
                aux = aux.next
                i = i+1
            end
        end
    else
        aux = nil
    end
    aux
end
insert(position, value) click to toggle source
# File lib/biblio/list.rb, line 73
def insert(position, value)
    if position >= 0 && position <= @size
        
        if position == 0 && @size == 0      # La lista esta vacia
            push_front(value)
        elsif position == @size
            push_back(value)
        elsif position  == 0
            push_front(value)
        else
            # Buscamos el nodo anterior a la posicion
            i = 0
            aux = @front
            while i < position-1
                aux = aux.next
                i = i+1
            end
            
            #realizamos swap
            swap = aux.next
            aux.next = Node.new(value, aux, swap)
            aux = aux.next
            @size = @size + 1
        end
    end    
    nil
end
pop_back() click to toggle source
# File lib/biblio/list.rb, line 43
def pop_back
    aux = nil
    if size == 1
        aux = @end.value
        @end = Node.new(nil, nil, nil)
        @front = @end
        @size = @size - 1
    elsif size > 1
        aux = @end.value
        @end = @end.previous
        @size = @size - 1
    end
    aux
end
pop_front() click to toggle source
# File lib/biblio/list.rb, line 58
def pop_front
    aux = nil
    if size == 1
        aux = @front.value
        @front = Node.new(nil, nil, nil)
        @end = @front
        @size = @size - 1
    elsif size > 1
        aux = @front.value
        @front = @front.next
        @size = @size - 1
    end
    aux
end
push_back(value) click to toggle source
# File lib/biblio/list.rb, line 19
def push_back(value)
    if size == 0
        @end = Node.new(value, nil, nil)
        @front = @end
    else
        @end.next = Node.new(value, @end, nil)
        @end = @end.next
    end
    @size = @size + 1
    nil
end
push_front(value) click to toggle source
# File lib/biblio/list.rb, line 31
def push_front(value)
    if size == 0
        @front = Node.new(value, nil, nil)
        @end = @front
    else
        @front.previous = Node.new(value, nil, @front)
        @front= @front.previous
    end
    @size = @size + 1
    nil
end