Menu
CoddyTech

Remove Nth Node From End of List

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

Usuń n-ty węzeł, licząc od końca listy, gdzie ostatni węzeł jest 1. od końca. Zwróć wartości pozostałych węzłów w kolejności występowania na liście.

Funkcja

removeNthFromEnd(values: integer-array, next: integer-array, n: integer) → integer-array
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
ninteger
który węzeł usunąć, licząc od końca, gdzie 1 oznacza ostatni węzeł
Zwracainteger-array
pozostałe wartości w kolejności na liście; pusta, gdy usunięty zostanie jedyny węzeł

Ograniczenia

  • 1 ≤ L ≤ 5000, gdzie L jest długością values i next.
  • -100 ≤ values[i] ≤ 100
  • 1 ≤ n ≤ L
  • Każdy element next[i] jest równy -1 lub indeksowi węzła od 0 do L-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 = [5, 9, 2, 7, 6]next = [2, 3, 4, -1, 1]n = 2
Wyjście
[5, 2, 6, 7]
Wyjaśnienie
Podążając za linkami od węzła 0, odwiedzamy węzły 0, 2, 4, 1, 3, więc lista ma postać 5, 2, 6, 9, 7. Drugim węzłem od końca jest węzeł 1 o wartości 9, a bez niego lista ma postać 5, 2, 6, 7. Wpis tablicy values[5-2] = 7 odpowiada ostatniemu węzłowi, a nie temu, który należy usunąć.

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

challenge icon

Pytanie dodatkowe

Czy potrafisz znaleźć i odłączyć węzeł w jednym przebiegu, bez wcześniejszego liczenia długości?

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

Przypadek 1

Przypadek 2

Przypadek 3

Wejście

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

Oczekiwane

[5, 2, 6, 7]