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

305
Views
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 answers
Answer question

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 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!