class LinkedList
Attributes
@overload Método de acceso y escritura para la cabeza de la lista
Public Class Methods
@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
@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
@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
@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
@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
@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
@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