Menu
CoddyTech

Middle of the Linked List

Otrzymujesz jednokierunkową listę połączoną zapisaną w dwóch tablicach o tej samej długości. Węzeł i przechowuje wartość values[i] i wskazuje na węzeł next[i], -1 oznacza koniec listy, a głową listy jest węzeł 0. Węzły nie są zapisane w kolejności występowania na liście, więc podążaj za wskazaniami.

Zwróć wartość środkowego węzła. Jeśli lista ma parzystą liczbę węzłów, ma dwa środkowe węzły; zwróć wartość drugiego z nich.

Funkcja

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
wartość przechowywana przez każdy węzeł
nextinteger-array
indeks węzła, do którego prowadzi każdy węzeł, lub -1 dla ostatniego węzła
Zwracainteger
wartość środkowego węzła, drugiego środkowego w przypadku parzystej długości

Ograniczenia

  • 1 ≤ n ≤ 5000, gdzie n jest długością values i next.
  • -104 ≤ values[i] ≤ 104
  • Każde next[i] ma wartość -1 lub jest indeksem węzła od 0 do n-1.
  • Rozpoczynając od węzła 0, lista odwiedza każdy węzeł dokładnie raz, a następnie dociera do -1. Nie ma cyklu.

Przykłady

Wejście
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
Wyjście
5
Wyjaśnienie
Podążając za połączeniami z węzła 0, otrzymujemy węzły 0, 3, 4, 2, 1, więc lista ma postać 4, 7, 5, 2, 9. Trzeci z pięciu węzłów to węzeł 4, którego wartość wynosi 5. Środkowy element samej tablicy, values[2] = 2, to inny węzeł.

lock icon+13 ukrytych testów przy wysłaniu

challenge icon

Pytanie dodatkowe

Czy potrafisz zwrócić w jednym przejściu węzeł znajdujący się w jednej trzeciej długości listy? Jak szybko poruszałby się każdy wskaźnik i gdzie byś się zatrzymał?

Zresetuj kod
def middleNode(values, next):
    # Wpisz kod tutaj
Przypadki testowe

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

5