Mi solución:
.
.
.
.
.
.
.
.
.
.
.
import { LinkedList } from "./SinglyLinkedList";
import { Node } from "./Node";
export class LinkedListRecharged extends LinkedList {
get(index){
if (index < 0 || index >= this.length) { // index fuera de rango
return null;
}
let nodeCurrent = this.head;
let i = 0;
while (i!=index) {
nodeCurrent = nodeCurrent.next;
i++;
}
return nodeCurrent.value;
}
insertAt(index, value){
if (index < 0 || index > this.length-1) {
return null;
}
if (index == 0) { //si el indice es 0 se inserta al principio
this.prepend(value);
return this;
}
if (index == this.length) { //si el indice es igual a length, se inserta al final
this.append(value);
return this;
}
if (index > 0 && index < this.length - 1) { //si el indice está en el medio
const newNode = new Node(value);
const nodoPrev = this.nodeSearch(index - 1) //buscamos al nodo previo
newNode.next = nodoPrev.next //newNodo apunta al Nodo Posterior
nodoPrev.next = newNode; //nodo previo apunta al nuevo nodo
this.length++;
return this;
}
}
toArray(){
let values = [];
let pointer = this.head;
for (let i = 0; i < this.length; i++) {
values.push(pointer.value);
pointer = pointer.next;
}
return values;
}
removeAt(index){
if (index < 0 || index > this.length-1) {
return null;
}
if (index == 0) { //se elimina el primer nodo
this.head = this.head.next;
this.length--;
return this;
}
if (index == this.length - 1) { //se elimina el último nodo
const nodoPrev = this.nodeSearch(index - 1);
this.tail = nodoPrev;
nodoPrev.next = null;
this.length--;
return this;
}
if (index > 0 && index < this.length - 1) { //si el indice está al medio
const nodoPrev = this.nodeSearch(index - 1) //buscamos al nodo previo
const nodoPost = this.nodeSearch(index + 1) //buscamos al nodo posterior
nodoPrev.next = nodoPost; //el nodo previo ahora apunta al nodo posterior
this.length--;
return this;
}
}
nodeSearch(index) {
let pointerSearch = this.head;
let i = 0;
if (index < 0 || index >= this.length) {
throw new Error("El índice esta fuera de rango");
}
while (i != index && pointerSearch.next != null) {
pointerSearch = pointerSearch.next;
i++;
}
return pointerSearch;
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?