Menu
CoddyTech

Middle of the Linked List

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

Верните значение среднего узла. Если в списке чётное число узлов, то средних узлов два; верните значение второго из них.

Функция

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

Ограничения

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

Примеры

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

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

challenge icon

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

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

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

Случай 1

Случай 2

Случай 3

Ввод

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

Ожидается

5