--- id: 587d8251367417b2b2512c65 title: Remove Elements from a Linked List by Index challengeType: 1 videoUrl: '' localeTitle: Eliminar elementos de una lista enlazada por índice --- ## Description
Antes de pasar a otra estructura de datos, obtengamos un par de los últimos bits de práctica con listas vinculadas. Escribamos un método removeAt que elimine el element en un index dado. El método debe llamarse removeAt(index) . Para eliminar un element en un determinado index , deberemos mantener un recuento de cada nodo a medida que avanzamos a lo largo de la lista vinculada. Una técnica común utilizada para recorrer los elementos de una lista enlazada implica un 'corredor' , o centinela, que 'apunta' a los nodos que su código está comparando. En nuestro caso, a partir de la head de nuestra lista, comenzamos con una currentIndex variable que comienza en 0 . El currentIndex debe incrementarse en uno para cada nodo que pasemos. Al igual que con nuestro método remove(element) , debemos tener cuidado de no dejar huérfano al resto de nuestra lista cuando eliminamos el nodo en nuestro método removeAt (índice). Mantenemos nuestros nodos contiguos asegurándonos de que el nodo que tiene referencia al nodo eliminado tenga una referencia al siguiente nodo.
## Instructions
Escriba un removeAt(index) que elimine y devuelva un nodo en un index determinado. El método debe devolver null si el index dado es negativo, o mayor o igual a la length de la lista enlazada. Nota Recuerde mantener la cuenta del currentIndex .
## Tests
```yml tests: - text: Su clase LinkedList debe tener un método removeAt . testString: 'assert((function(){var test = new LinkedList(); return (typeof test.removeAt === "function")}()), "Your LinkedList class should have a removeAt method.");' - text: Su método removeAt debería reducir la length de la lista enlazada testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); test.add("kitten"); test.removeAt(1); return test.size() === 2}()), "Your removeAt method should reduce the length of the linked list");' - text: El método removeAt también debe devolver el elemento del nodo eliminado. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); test.add("kitten"); return test.removeAt(1) === "dog"}()), "Your removeAt method should also return the element of the removed node.");' - text: El método removeAt también debe devolver un null si el índice dado es menor que 0 testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); test.add("kitten"); return (test.removeAt(-1) === null)}()), "Your removeAt method should also return null if the given index is less than 0");' - text: El método removeAt también debe devolver un null si el índice dado es igual o mayor que la length de la lista enlazada. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); test.add("kitten"); return (test.removeAt(3) === null)}()), "Your removeAt method should also return null if the given index is equal or more than the length of the linked list.");' ```
## Challenge Seed
```js function LinkedList() { var length = 0; var head = null; var Node = function(element){ // {1} this.element = element; this.next = null; }; this.size = function(){ return length; }; this.head = function(){ return head; }; this.add = function(element){ var node = new Node(element); if(head === null){ head = node; } else { currentNode = head; while(currentNode.next){ currentNode = currentNode.next; } currentNode.next = node; } length++; }; this.remove = function(element){ var currentNode = head; var previousNode; if(currentNode.element === element){ head = currentNode.next; } else { while(currentNode.element !== element) { previousNode = currentNode; currentNode = currentNode.next; } previousNode.next = currentNode.next; } length --; }; // Only change code below this line // Only change code above this line } ```
## Solution
```js // solution required ```