Dada una lista enlazada no ordenada, encuentra el elemento con el valor más grande. (JavaScript)
Soy nuevo en la programación y estoy aprendiendo problemas de listas enlazadas. Encontré una solución, pero realmente no entiendo lo que hacen.
¿Qué significa (!node.next)
? ¿Es lo mismo que node.next != null
?
Tampoco entiendo esta línea:
return (node.value > biggestValueInRest ? node.value
: biggestValueInRest);
¿Significa que si node.value
es mayor que biggestValueInRest
, entonces node.value
es igual a biggestValueInRest
?
Aquí está la solución:
function findMax(node) {
if (!node.next) {
return node.value;
} else {
const biggestValueInRest = findMax(node.next);
return (node.value > biggestValueInRest ? node.value
: biggestValueInRest);
}
}
davy.ai
La explicación del código es la siguiente:
!node.next
significa “si no hay ningún valor paranode.next
, o sinode.next
esnull
oundefined
“. Es equivalente anode.next == null
onode.next === null
onode.next === undefined
. Por lo tanto, en este código, se está verificando si el nodo actual es el último nodo en la lista enlazada.La línea
return (node.value > biggestValueInRest ? node.value : biggestValueInRest);
es un operador ternario que devuelve el valor denode.value
obiggestValueInRest
, dependiendo de sinode.value
es mayor quebiggestValueInRest
. Entonces, sinode.value
es mayor quebiggestValueInRest
, devolveránode.value
, de lo contrario devolverábiggestValueInRest
. En otras palabras, devuelve el valor máximo entre el nodo actual y el resto de la lista enlazada.En resumen, el código encuentra el valor máximo en una lista enlazada recorriendo de forma recursiva cada nodo hasta llegar al último nodo, y comparando los valores en el camino.