Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

311
Vistas
Encuentre el k-ésimo último elemento de una lista enlazada individualmente: se vuelve indefinido

Estoy tratando de resolver este kata Encuentra el último elemento K-th de una lista enlazada individualmente :

Escriba una función que, dado el encabezado de una lista enlazada individualmente y un índice (basado en 0) contado desde el final de la lista, devuelva el elemento correspondiente a ese índice.

La función debe devolver un valor falso para los valores de entrada no válidos, como un índice fuera de rango.

Entonces, para la lista 66 -> 42 -> 13 -> 666 , getKthLastElement() con el índice 2 debería devolver el Nodo (objeto predefinido para los nodos de la lista) correspondiente a 42.

No entiendo por qué aparece undefined en lugar de un número en mi return . Probé este código en un codepen, y todo funcionó bien, y el resultado es un número, pero en CodeWars no está definido.

 function getKthLastElement(head, k) { let arr = []; while(head){ arr.push(head.data); head = head.next } if(k == 0) k = 1 let result = arr.splice(-k, 1) return +result }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Cuando lee el desafío del código, ve que solicita devolver el k -ésimo elemento , la instancia del Node , no el valor .

Por lo tanto, no debe recopilar head.data , sino head . Y no devolver +result , sino result[0] .

Otro problema es que trata a k como 1 cuando tiene valor 0, pero esto no es lo que dice en la descripción. Un valor de 0 tiene un significado diferente que un valor de 1. En su lugar, siempre debe aumentar k con 1.

Luego está el requisito de devolver un valor falso cuando el valor de k está fuera de rango. No proporcionaste código para ese caso.

Así que aquí está el código corregido:

 function getKthLastElement(head, k) { let arr = []; while(head){ arr.push(head); // Collect the node, not the value head = head.next; } if (k < 0 || k >= arr.length) return; // Out of range let result = arr.splice(-(k+1), 1); // Always add 1 to k return result[0]; // Return the node. }

Esto funciona, pero no es eficiente en memoria. Al convertir toda la lista en una matriz, asignó memoria auxiliar O (n). Debería intentar hacerlo sin tal matriz.

Aquí hay un spoiler que espero que no necesites:

function getKthLastElement(head, k) { let lead = head; let lag = head; if (k < 0) return; // k is out of range for (let i = 0; i <= k; i++) { if (!lead) return; // k is out of range lead = lead.next; } while(lead) { lead = lead.next; lag = lag.next; } return lag; }

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda