Created
March 4, 2017 13:07
-
-
Save vitkarpov/e540df153cb1b00ae2ebebd25e7999c6 to your computer and use it in GitHub Desktop.
"Cracking the coding interview". Linked List, 2.2.2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Возвращает 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