Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save vitkarpov/e540df153cb1b00ae2ebebd25e7999c6 to your computer and use it in GitHub Desktop.
Save vitkarpov/e540df153cb1b00ae2ebebd25e7999c6 to your computer and use it in GitHub Desktop.
"Cracking the coding interview". Linked List, 2.2.2
/**
* Возвращает k-й элемент с конца списка.
* Реализует метод «двух указателей».
*
* @param {Node} head
* @param {Numner} k
* @returns {?Node}
*/
function getKthElementToLast(head, k) {
let p1 = head;
let p2 = head;
// сперва разведем указатели на расстояние n - k,
// для этого сдвинем первый на k, а второй оставим в начале
for (let i = 0; i < k; i++) {
if (p1 === null) {
return null;
}
p1 = p1.next;
}
// теперь начинаем двигать оба указателя одновременно, пока первый не достигнет конца,
// тогда второй будет указывать на n - (n - k) = k элемент
while (p1 !== null) {
p1 = p1.next;
p2 = p2.next;
}
return p2;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment