Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

593
Views
¿Por qué este ListNode usa un encabezado ficticio y asigna valor al siguiente nodo en lugar del actual?

Así que este es un problema de LeetCode . El objetivo principal es fusionar dos listas ordenadas, pero ese no es el problema. Busqué la solución a continuación y estoy realmente confundido por dos razones.

  1. ¿Por qué estamos usando una cabeza ficticia?
  2. ¿Por qué asignamos al siguiente nodo en lugar del actual?

Traté de entenderlo, sin embargo, no pude entender la lógica. Imprimo declaraciones para ver qué está pasando debajo del capó y todavía me confunde por qué hacemos node.next = new ListNode(list1.val); en lugar de node = new ListNode(list1.val); . Usando node = new ListNode(list1.val); devuelve una lista vacía y no sé por qué

 var mergeTwoLists = function (list1, list2) { const head = new ListNode(0); let node = head; while (list1 !== null || list2 !== null) { if (list2 === null || (list1 !== null && list1.val <= list2.val)) { node.next = new ListNode(list1.val); list1 = list1.next; } else { node.next = new ListNode(list2.val); list2 = list2.next; } node = node.next; } return head.next; };
about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

¿Por qué estamos usando una cabeza ficticia?

Para simplificar el código en el bucle. Se puede hacer sin dummy, pero entonces el código se vería así:

 let head = null; // no dummy let node = head; while (list1 !== null || list2 !== null) { if (list2 === null || (list1 !== null && list1.val <= list2.val)) { if (node == null) { // First time only -- need to assign to head head = new ListNode(list1.val); } else { // all other times: node.next = new ListNode(list1.val); } list1 = list1.next; } else { if (node == null) { // First time only -- need to assign to head head = new ListNode(list2.val); } else { // all other times: node.next = new ListNode(list2.val); } list2 = list2.next; } node = node.next; } return head; // There's no dummy, so return real head

Tenga en cuenta cómo debemos distinguir dentro del bucle entre el caso en el que aún no tenemos el nodo principal y debemos asignarle, y todos los demás casos. Con la introducción de un nodo ficticio, esta distinción no es necesaria en el bucle, y después del bucle podemos omitir ese nodo ficticio para encontrar la cabeza real ( head.next ).

¿Por qué asignamos al siguiente nodo en lugar del actual?

Para crear una lista vinculada, debe asignar a los next atributos de los nodos. Si no asigna a los next atributos, sino a las variables, no se crea ninguna lista. Si simplemente hace node = new ListNode((list2.val) , crea un nodo y lo asigna a una variable, pero no se convierte en parte de una lista vinculada más grande. Peor aún, cuando en una próxima iteración vuelve a hacer esto , pierde la referencia al nodo anterior que se creó en la iteración anterior; no hay forma de recuperarlo.

about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!