Dado el encabezado de una lista ordenada ordenada, elimine todos los duplicados de manera que cada elemento aparezca solo una vez. Devuelve 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 la head en let curr ? Y, si estoy tratando de hacer lo mismo sin tomar la head en otra variable, obtendré solo [2] como salida.
¿Por qué estamos tomando la
headenlet curr?
Por dos razones:
curr debe inicializarse en algo , de lo contrario, tendrá un valor indefinido, lo que hará que la condición while siempre sea falsa, por lo que no habrá iteraciones ni eliminaciones.
curr pretende referirse a cada nodo (no duplicado) uno tras otro, por lo que tiene sentido comenzar con el primer nodo, que es head .
Y, si estoy tratando de hacer lo mismo sin tomar la
headen otra variable, obtendré solo [2] como salida.
Eso solo podría suceder cuando también cambia el return head de retorno por return curr . Si lo hace, siempre devolverá una lista que no tiene más de un nodo, porque después de que se complete el bucle, curr se referirá al último nodo de la lista (si no está vacío).
Para devolver todos los nodos en una lista, siempre debe devolver su primer nodo, y eso es lo que representa head .