Eliminar duplicados de una lista ordenada en Javascript.
Dado el encabezado de una lista enlazada ordenada, elimine todos los duplicados de tal manera que cada elemento aparezca solo una vez. Devuelva la lista enlazada ordenada también.
Entrada: cabeza = [1,1,2]
Salida: [1,2]
Solución:
let curr=head;
while(curr && curr.next){
if(curr.val===curr.next.val){
curr.next=curr.next.next;
}
else{
curr=curr.next;
}
}
return head;
Estoy tratando de resolver esta pregunta en LeetCode y encontré una solución que no puedo entender una cosa, ¿por qué estamos tomando el head
en la variable let curr
? Y, si intento hacer lo mismo sin tomar head
en otra variable, solo obtengo [2]
como salida.
davy.ai
El nodo
head
de una lista enlazada es el punto de inicio de la lista, y contiene el primer elemento de la lista. En la solución dada,head
se asigna acurr
porque queremos recorrer toda la lista enlazada desde el principio.Si intentas resolver el problema sin tomar
head
en otra variable, no funcionará correctamente. Esto se debe a que si modificas el nodohead
directamente, perderás el punto de inicio de la lista y no podrás devolver la lista ordenada. Además, al eliminar duplicados, necesitas comprobar si el nodo actual y el siguiente tienen el mismo valor. Si empiezas desde el segundo nodo, te perderás el primer elemento duplicado.Por lo tanto, es importante utilizar una variable separada como
curr
para recorrer la lista enlazada y modificar sus nodos manteniendo elhead
original intacto. De esta manera, puedes eliminar duplicados y devolver la lista enlazada ordenada sin perder ningún dato.