Menu
CoddyTech

Remove Nth Node From End of List

Дан односвязный список, хранящийся в двух массивах одинаковой длины. Узел i содержит значение values[i] и ссылается на узел next[i], -1 обозначает конец списка, а голова — это узел 0. Узлы хранятся не в порядке списка, поэтому следуйте по ссылкам.

Удалите n-й узел, считая с конца списка, где последний узел — 1-й с конца. Верните значения оставшихся узлов в порядке списка.

Функция

removeNthFromEnd(values: integer-array, next: integer-array, n: integer) → integer-array
valuesinteger-array
значение, хранящееся в каждом узле
nextinteger-array
индекс узла, на который ссылается каждый узел, или -1 для последнего узла
ninteger
какую ноду удалить, считая с конца, где 1 — последняя нода
Возвращаетinteger-array
оставшиеся значения в порядке списка, пусто, если удалён единственный узел

Ограничения

  • 1 ≤ L ≤ 5000, где L — длина values и next.
  • -100 ≤ values[i] ≤ 100
  • 1 ≤ n ≤ L
  • Каждый next[i] равен -1 или индексу узла от 0 до L-1.
  • Начиная с узла 0, список проходит через каждый узел ровно один раз, а затем достигает -1. Цикла нет.

Примеры

Ввод
values = [5, 9, 2, 7, 6]next = [2, 3, 4, -1, 1]n = 2
Вывод
[5, 2, 6, 7]
Пояснение
Переходя по ссылкам, начиная с узла 0, мы посещаем узлы 0, 2, 4, 1, 3, поэтому список имеет вид 5, 2, 6, 9, 7. Второй с конца — узел 1 со значением 9, и без него список имеет вид 5, 2, 6, 7. Элемент массива values[5-2] = 7 — последний узел, а не тот, который нужно удалить.

lock icon+14 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Можешь найти узел и отвязать его за один проход, не подсчитывая предварительно длину?

Сбросить код
def removeNthFromEnd(values, next, n):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

values = [5, 9, 2, 7, 6]
next = [2, 3, 4, -1, 1]
n = 2

Ожидается

[5, 2, 6, 7]