class LinkedList

Attributes

head[RW]

@overload Método de acceso y escritura para la cabeza de la lista

Public Class Methods

new() click to toggle source

@note La clase se inicializa con la cabeza a nil

# File lib/prct06/linkedList.rb, line 29
def initialize()

        @head = nil

end

Public Instance Methods

deleteFirst() click to toggle source

@note Método que permite eliminar un elemento por el principio @return [Any Type] Elemento eliminado

# File lib/prct06/linkedList.rb, line 54
def deleteFirst()

        #Si la lista no está vacía movemos una posición head
        #y el prev apuntará a nil:

        tmp = @head

        if @head != nil

                @head      = @head.next

                @head.prev = nil
        
        end

        tmp

end
deleteLast() click to toggle source

@note Método que permite eliminar un elemento por el final @return [Any Type] Elemento eliminado

# File lib/prct06/linkedList.rb, line 127
def deleteLast()

        #Si la lista no está vacía:

        if @head != nil

                #Desplazamos el head hasta la penúltima posición:

                while @head.next.next != nil

                        tmp        = @head

                        @head      = @head.next

                        @head.prev = tmp

                end
                                                
                #Ponemos el siguiente en la penúltima posición a nil:

                foo = @head.next

                @head.next = nil

                #Desplazamos nuevamente el head a la posición inicial:

                while @head.prev != nil

                        @head = @head.prev

                end

        end

foo

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

@note Función retorna los bloques que se indique por parámetro en la invocación del método @return [Any Type] Bloques seleccionados

# File lib/prct06/linkedList.rb, line 195
def each

                tmp = @head

                while tmp != nil do

                        yield tmp.value

                        tmp = tmp.next

                end

end
putFirst(value) click to toggle source

@note Método por el cual se introduce un elemento por el principio @param [Any Type] Valor a introducir

# File lib/prct06/linkedList.rb, line 38
def putFirst(value)

        #Inicializamos un nodo auxiliar con el valor a introducir
        #Y apuntando como siguiente a head:
        
        node  = Struct::Node.new(value,nil, @head)

        #Hacemos que el head tome el comportamiento del nodo creado

        @head = node

end
putLast(value) click to toggle source

@note Función que permite añadir un nuevo nodo a la lista por el final @param [Any Type] Valor a introducir

# File lib/prct06/linkedList.rb, line 76
def putLast(value)

        #Si aún no se ha introducido ningún nodo en la lista,
        #tanto el head como el tail apuntarán al mismo nodo
        #de lo contratio, añadiremos un nodo a continuación de tail:

        if @head != nil

                #Desplazamos el head hasta la última posición:

                while @head.next != nil

                        tmp        = @head

                        @head      = @head.next

                        @head.prev = tmp

                end

                #Inicializamos un nodo auxiliar con el valor a introducir:

                node = Struct::Node.new(value, @head, nil)

                #Colocamos el node a continuación del último

                @head.next = node

                #Desplazamos nuevamente el head a la posición inicial:

                while @head.prev != nil

                        @head = @head.prev

                end

        else

                #Creamos el nodo inicial:

                node = Struct::Node.new(value, nil, nil)

                @head = node
        
        end

end
to_s() click to toggle source

@note Función que permite mostrar una salida formateada de la lista @return [String] String con el contenido de la lista

# File lib/prct06/linkedList.rb, line 168
def to_s()

        #Para no modificar la estructura de la lista,
        #utilizaremos una variable temporal, la cual será
        #desplazada al siguiente nodo en cada iteración:

        tmp = @head

        #String que almacenará el contenido a mostrar:

        aux = ""

        while tmp != nil

                aux += "#{tmp.value}\n"

                tmp  = tmp.next

        end

        aux

end