Estaba haciendo esta prueba de Leetcode https://leetcode.com/problems/add-two-numbers/ y la solución de JavaScript que encontré en línea es
var addTwoNumbers = function(l1, l2) { let carry = 0; let previousNode = new ListNode(); let headNode = previousNode; while (l1 || l2 || carry) { let val1 = 0; let val2 = 0; if (l1) { val1 = l1.val; l1 = l1.next; } if (l2) { val2 = l2.val; l2 = l2.next; } let sum = val1 + val2 + carry; carry = sum > 9 ? 1 : 0; let digit = sum % 10; let currentNode = new ListNode(digit); previousNode.next = currentNode; previousNode = currentNode; } return headNode.next; }No entiendo cómo se actualiza headNode y tiene la respuesta correcta. Quiero decir:
Paso 1: creamos la nueva variable anterior Nodo como {val:0 , next: null}
Paso 2: headNode es previousNode, lo que significa {val:0 , next: null}
Paso 3: creamos la nueva variable currentNode como {val:digit1 , next: null}
Paso 4: el nodo anterior. el siguiente se establece como el nodo actual, por lo tanto, el nodo anterior ahora es {val:0 , next: {val:digit1 , next: null}}
Paso 5: configuramos el nodo anterior como el nodo actual para que podamos continuar agregando las siguientes soluciones, y ahora el nodo anterior es {val:digit1 , next: null}
y aquí seguimos con los pasos del ciclo while
Paso 6: creamos la nueva variable currentNode como {val:digit2 , next: null}
Paso 7: anteriorNodo.siguiente se establece como el nodo actual, por lo tanto, el anteriorNodo ahora es {val:digit1 , next: {val:digit2 , next: null}}
Paso 8: configuramos el nodo anterior como el nodo actual, y ahora el nodo anterior es {val:digit2 , next: null}
.... y así ...
Ahora, pregunta: ¿cuándo actualizamos headNode? ¿Por qué este código funciona y headNode es algo así como {val: 0, next: (todo lo que necesitamos)} y, por lo tanto, llamando a headNode.next obtenemos la solución correcta?
¡Gracias por la explicación!