--- id: 587d8251367417b2b2512c63 title: Remove Elements from a Linked List challengeType: 1 videoUrl: '' localeTitle: Eliminar elementos de una lista enlazada --- ## Description
El siguiente método importante que necesitará cualquier implementación de una lista vinculada es un método de remove . Este método debe tomar el elemento que queremos eliminar como argumento y luego buscar en la lista para encontrar y eliminar el nodo que contiene ese elemento. Cada vez que eliminamos un nodo de una lista vinculada, es importante que no dejemos huérfanos accidentalmente al hacerlo. Recuerde que la next propiedad de cada nodo apunta al nodo que lo sigue en la lista. Si estamos eliminando el elemento medio, por ejemplo, vamos a querer asegurarse de que tenemos una conexión desde previa del nodo de ese elemento next propiedad para el elemento medio next propiedad (que es el siguiente nodo en la lista!) Esto puede sonar realmente confuso, así que volvamos al ejemplo de la línea de conga para tener un buen modelo conceptual. Imagínate a ti mismo en una línea de conga, y la persona que está directamente delante de ti deja la línea. La persona que acaba de dejar la línea ya no tiene a sus manos sobre nadie, y usted ya no tiene las manos sobre la persona que se fue. Da un paso adelante y pone sus manos sobre la siguiente persona que ve. Si el elemento que queremos eliminar es el elemento head , reasignamos la head al segundo nodo de la lista enlazada.
## Instructions
Escriba un método de remove que toma un elemento y lo elimina de la lista vinculada. Nota La length de la lista debería disminuir en uno cada vez que se elimine un elemento de la lista vinculada.
## Tests
```yml tests: - text: Su clase LinkedList debe tener un método de remove . testString: 'assert((function(){var test = new LinkedList(); return (typeof test.remove === "function")}()), "Your LinkedList class should have a remove method.");' - text: Su método de remove debe reasignar la head al segundo nodo cuando se elimina el primer nodo. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); test.remove("cat"); return test.head().element === "dog"}()), "Your remove method should reassign head to the second node when the first node is removed.");' - text: Su método de remove debe disminuir la length de la lista enlazada en uno por cada nodo eliminado. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); test.remove("cat"); return test.size() === 1})(), "Your remove method should decrease the length of the linked list by one for every node removed.");' - text: El método de remove debe reasignar la referencia del nodo anterior del nodo eliminado a la next referencia del nodo eliminado. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog");test.add("kitten"); test.remove("dog"); return test.head().next.element === "kitten"})(), "Your remove method should reassign the reference of the previous node of the removed node to the removed node's next reference.");' ```
## Challenge Seed
```js function LinkedList() { var length = 0; var head = null; var Node = function(element){ 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 { var currentNode = head; while(currentNode.next){ currentNode = currentNode.next; } currentNode.next = node; } length++; }; this.remove = function(element){ // Only change code below this line // Only change code above this line }; } ```
## Solution
```js // solution required ```