--- id: 587d8251367417b2b2512c62 title: Create a Linked List Class challengeType: 1 videoUrl: '' localeTitle: Crear una clase de lista enlazada --- ## Description
Vamos a crear una clase de linked list . Cada lista vinculada debe comenzar con unas pocas propiedades básicas: una head (el primer elemento de su lista) y una length (número de elementos en su lista). A veces, verás implementaciones de listas vinculadas que incorporan una tail para el último elemento de la lista, pero por ahora solo nos quedaremos con estos dos. Cada vez que agregamos un elemento a la lista vinculada, nuestra propiedad de length debe incrementarse en uno. Queremos tener una forma de agregar elementos a nuestra lista vinculada, por lo que el primer método que querremos crear es el método de add . Si nuestra lista está vacía, agregar un elemento a nuestra lista vinculada es lo suficientemente simple: simplemente envolvemos ese elemento en una clase de Node , y asignamos ese nodo al head de nuestra lista vinculada. Pero, ¿y si nuestra lista ya tiene uno o más miembros? ¿Cómo agregamos un elemento a la lista? Recuerde que cada nodo en una lista vinculada tiene una propiedad next . Para agregar un nodo a la lista, busque el último nodo en la lista y apunte la next propiedad del último nodo a nuestro nuevo nodo. (Sugerencia: sabe que ha llegado al final de una lista vinculada cuando la next propiedad de un nodo es null ).
## Instructions
Escriba un método de adición que asigne el primer nodo que empuja a la lista vinculada al head ; después de eso, cada vez que agregue un nodo, cada nodo debe ser referenciado por la next propiedad del nodo anterior. Nota La length su lista debe aumentar en uno cada vez que se agregue un elemento a la lista vinculada.
## Tests
```yml tests: - text: Su clase LinkedList debe tener un método de add . testString: 'assert((function(){var test = new LinkedList(); return (typeof test.add === "function")}()), "Your LinkedList class should have a add method.");' - text: Su clase LinkedList debe asignar head al primer nodo agregado. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); return test.head().element === "cat"}()), "Your LinkedList class should assign head to the first node added.");' - text: El node anterior en su clase LinkedList debe tener referencia al nodo más reciente creado. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); return test.head().next.element === "dog"}()), "The previous node in your LinkedList class should have reference to the newest node created.");' - text: El size de su clase LinkedList debe ser igual a la cantidad de nodos en la lista vinculada. testString: 'assert((function(){var test = new LinkedList(); test.add("cat"); test.add("dog"); return test.size() === 2}()), "The size of your LinkedList class should equal the amount of nodes in the linked list.");' ```
## Challenge Seed
```js function LinkedList() { var length = 0; var head = null; var Node = function(element){ this.element = element; this.next = null; }; this.head = function(){ return head; }; this.size = function(){ return length; }; this.add = function(element){ // Only change code below this line // Only change code above this line }; } ```
## Solution
```js // solution required ```