Дан односвязный список. Найдите значение k-го элемента с конца. Нумерация с конца
начинается с нуля: последний элемент — нулевой.
type Elem struct {
Value int
Next *Elem
}
// ElemFromEnd возвращает значение k-го с конца элемента (k = 0 — последний).
// Если такого элемента нет — (0, false).
func ElemFromEnd(k int, head *Elem) (int, bool)
Пример
// 165 → 119 → 117 → 150 → 155 → 121 → 104
ElemFromEnd(0, head) // 104, true
ElemFromEnd(1, head) // 121, true
ElemFromEnd(3, head) // 150, true
ElemFromEnd(6, head) // 165, true
ElemFromEnd(9, head) // 0, false
Требования
- Список не изменять. Длина до 10⁶, O(L) времени и O(1) памяти, один проход.
k < 0, пустой список, k ≥ длины — (0, false), без паники.
Устно: в исходной задаче сигнатура была func ElemFromEnd(k int, head *Elem) interface{}
и при отсутствии элемента ожидался nil. Чем (int, bool) лучше?
Разбор и эталонное решение — после своей попытки: на собеседовании подсказок не будет.
Сначала попробуй сам — подсказки не дают готовый ответ.