Menu
CoddyTech

Palindrome Linked List

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

Верните true, если значения, прочитанные от головы до конца, совпадают со значениями, прочитанными от конца к голове, и false в противном случае.

Функция

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

Ограничения

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

Примеры

Ввод
next = [4, 3, -1, 2, 1]values = [3, 4, 3, 1, 1]
Вывод
true
Пояснение
Связи посещают узлы 0, 4, 1, 3, 2, поэтому список выглядит так: 3, 1, 4, 1, 3. Две тройки совпадают, две единицы совпадают, а у 4 посередине нет пары для сравнения.
challenge icon

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

Сможешь сделать это за время O(L) и используя O(1) дополнительной памяти?

Сбросить код
def isPalindrome(next, values):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

next = [4, 3, -1, 2, 1]
values = [3, 4, 3, 1, 1]

Ожидаемый вывод

true