Diseñe su implementación de la lista enlazada. Puede optar por utilizar una lista con enlaces simples o dobles.
Un nodo en una lista enlazada individualmente debe tener dos atributos: val
y next
. val
es el valor del nodo actual y next
es un puntero/referencia al siguiente nodo.
Si desea utilizar la lista doblemente enlazada, necesitará un atributo prev
para indicar el nodo anterior en la lista enlazada. Suponga que todos los nodos en la lista enlazada están indexados en 0 .
Implemente la clase MyLinkedList
:
MyLinkedList()
Inicializa el objeto MyLinkedList
.int get(int index)
Obtiene el valor del nodo indexth
en la lista enlazada. Si el índice no es válido, devuelve -1
.void addAtHead(int val)
Agrega un nodo de valor val
antes del primer elemento de la lista enlazada. Después de la inserción, el nuevo nodo será el primer nodo de la lista enlazada.void addAtTail(int val)
Agrega un nodo de valor val
como el último elemento de la lista enlazada.void addAtIndex(int index, int val)
Agrega un nodo de valor val
antes del nodo indexth
en la lista enlazada. Si el index
es igual a la longitud de la lista vinculada, el nodo se agregará al final de la lista vinculada. Si index
es mayor que la longitud, el nodo no se insertará .void deleteAtIndex(int index)
Elimina el nodo indexth
en la lista enlazada, si el índice es válido.Ejemplo 1:
Input ["MyLinkedList", "addAtHead", "addAtTail", "addAtIndex", "get", "deleteAtIndex", "get"] [[], [1], [3], [1, 2], [1], [1], [1]] Output [null, null, null, null, 2, null, 3] Explanation MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addAtHead(1); myLinkedList.addAtTail(3); myLinkedList.addAtIndex(1, 2); // linked list becomes 1->2->3 myLinkedList.get(1); // return 2 myLinkedList.deleteAtIndex(1); // now the linked list is 1->3 myLinkedList.get(1); // return 3
Restricciones:
0 <= index, val <= 1000
2000
llamadas para get
, addAtHead
, addAtTail
, addAtIndex
y deleteAtIndex
.
De acuerdo con el método de descripción, int get(int index)
puede recibir el índice del elemento y devolver el elemento en este índice si lo tenemos en nuestra lista. Suena bastante sencillo. Tenemos una lista con elementos, iteremos a través de ella y hagamos un seguimiento del índice actual y el índice que se nos proporciona. Si son iguales, encontramos el elemento y podemos regresar. En todos los demás casos devolvemos -1. Preste atención a la línea 11. Usamos head ya que almacena el enlace al encabezado de la lista. Téngalo en cuenta, nos pondremos en contacto con él.
Ejemplo: tenemos la lista 1 -> 2 -> 3 -> 4 ->5
1 tiene índice 0, 2 tiene índice 1 y así sucesivamente. Si nos dan el índice 3, debemos devolver 4 El siguiente método en nuestra lista es void addAtHead(int val)
debe insertar valor al principio de nuestra lista. Este es un poco complicado. Tenemos head que almacena el enlace a la cabeza, por lo que queremos empujar el siguiente elemento e insertar el valor proporcionado justo después de la cabeza. Lo primero que hacemos es crear el nuevo enlace que almacenará el valor proporcionado ( esquema a continuación ). Al mismo tiempo, necesitamos actualizar las relaciones entre los enlaces existentes y el nuevo. En lugar de usar palabras, veamos algunas imágenes. Espero que te ayuden a entender el concepto.
También tenemos un tamaño variable que está aquí para almacenar la cantidad de elementos en nuestra lista.
El siguiente método es void addAtTail(int val)
hace casi lo mismo que el anterior, la única diferencia es que insertamos nuestro valor antes de la cola de nuestra lista.
El siguiente método es void addAtIndex(int index, int val)
debe insertar un valor en LinkedList en un índice particular que se proporciona como parámetro. El primer nodo después de head tiene el índice 0, el siguiente tiene el índice 1 y así sucesivamente.
Nuestro objetivo es iterar al índice de destino e insertar valor en ese índice. Insertemos el valor 5 en el índice 1.
Nuestro último método para implementar es void deleteAtIndex(int index)
. Hace casi lo mismo que una inserción en el índice, excepto una cosa, esta vez eliminamos el enlace. Este artículo se está volviendo demasiado grande, así que proporciono algunas imágenes y código para que sea más fácil de entender. Eliminemos el nodo en el índice 3.
También publicado