Podwójnie połączona lista to struktura danych, w której każdy węzeł ma value
zarówno „łącza” do obu, jak previous
i następnego nodes
na liście. Rozważmy na przykład następujące węzły o wartościach 12, 99 i 37:
Tutaj węzły o wartościach 12 i 99 wskazują ich odpowiednie next
węzły o wartościach 99 i 37 . Węzeł o wartości 37 nie ma next
wskaźnika, ponieważ jest ostatnim węzłem na liście. Podobnie, węzły o wartościach 99 i 37 wskazują ich odpowiednie previous
węzły, 12 i 99 , ale 12 nie ma previous
wskaźnika, ponieważ jest to pierwszy węzeł na liście.
Ustawić
W praktyce „łącza” węzła są implementowane jako wskaźniki do lokalizacji poprzedniego i następnego węzła w pamięci. Dla naszych celów „pamięć” będzie tablicą węzłów, a lokalizacja węzła będzie jej indeksem w tablicy. Węzeł może być traktowany jako 3-krotna forma ( prev value next )
. Powyższy przykład może wyglądać następująco:
Zamiast tego może to wyglądać tak:
Zaczynając od dowolnego węzła, możesz podążać za previous
linkami (pokazanymi jako pochodzenie czerwonych strzałek), aby dostać się do poprzedzających go węzłów i next
linkami (zielonymi strzałkami), aby znaleźć kolejne węzły, aby uzyskać wszystkie wartości węzłów w kolejności: [12, 99, 37]
.
Pierwszy diagram powyżej może być reprezentowany w tablicy jako [[null, 12, 1], [0, 99, 2], [1, 37, null]]
. Drugi więc byłby [[2, 99, 1], [0, 37, null], [null, 12, 0]]
.
Wyzwanie
Napisz program, który pobiera jako dane wejściowe tablicę węzłów i indeks węzła i zwraca, w kolejności listowej, wartości węzłów na tej samej podwójnie połączonej liście.
Komplikacja
„Pamięć” nie zawsze zawiera węzły tylko jednej listy. Może zawierać kilka list:
Powyższa tablica zawiera trzy podwójnie połączone listy, oznaczone kolorami dla Twojej wygody:
Węzły w indeksach
7
,10
,1
,4
,3
,12
(widocznych jedynienext
odnośniki do zmniejszenia bałaganu; kliknij, aby powiększyć):Biorąc pod uwagę tę tablicę i dowolny z tych indeksów, Twój program powinien zwracać wartości w odpowiedniej kolejności
[0, 1, 1, 2, 3, 5, 8]
.Węzeł o indeksie
9
:Biorąc pod uwagę indeks
9
, twój program powinien powrócić[99]
.Węzły w indeksach
11
,8
,0
,6
,2
:Biorąc pod uwagę jeden z tych indeksów, powinien on zwrócić
[2, 3, 5, 7, 11]
.
Zasady
Wejście
Twój program otrzyma jako dane wejściowe:
Lista odes węzłów (3 krotki jak opisano powyżej), gdzie 1 ≤ 𝒏 ≤ 1000, w dowolnym dogodnym formacie, np. Tablica tablic, „płaska” tablica liczb całkowitych o długości 3𝒏 itd.
Elementy 3-krotki może znajdować się w dowolnej kolejności:
( prev value next )
,( next prev value )
, itd. Dla każdego węzła,prev
inext
będzienull
(lub inną dogodną wartością, na przykład-1
), wskazując na pierwszy lub ostatni węzeł podwójnie połączonej listy lub ważny indeks lista, oparta na 0 lub 1, co jest wygodne.value
będzie 32-bitową liczbą całkowitą ze znakiem lub największą liczbą całkowitą obsługiwaną przez Twój język, w zależności od tego, która wartość jest mniejsza.Indeks 𝒑 węzła na liście (1). Wskazany węzeł może być pierwszym węzłem na podwójnie połączonej liście, ostatnim, środkowym lub nawet jedynym.
Lista wejściowa (1) może zawierać dane patologiczne (np. Cykle, węzły wskazywane przez wiele innych węzłów itp.), Ale indeks wejściowy (2) zawsze będzie wskazywał węzeł, z którego można uzyskać pojedyncze, dobrze uformowane wyjście wydedukować.
Wynik
Twój program powinien wyświetlać wartości węzłów podwójnie połączonej listy, której członkiem jest węzeł o indeksie 𝒑, w kolejności list. Dane wyjściowe mogą być w dowolnym dogodnym formacie, ale dane muszą zawierać tylko węzły value
.
Zwycięski
To jest golf golfowy . Najkrótsza odpowiedź w bajtach wygrywa. Obowiązują standardowe luki.
Przypadki testowe
Poniżej każdy przypadek testowy ma postać:
X)
prev value next, prev value next, ...
index
value value value ...
... gdzie X
jest litera identyfikująca przypadek testowy, drugi wiersz to lista wejściowa, trzeci wiersz to indeks wejściowy oparty na 0, a czwarty wiersz to wynik.
A) null 12 1, 0 99 2, 1 37 null
1
12 99 37
B) 2 99 1, 0 37 null, null 12 0
1
12 99 37
C) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
4
0 1 1 2 3 5 8
D) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
0
2 3 5 7 11
E) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
9
99
F) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
18
80 80 67 71
G) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
8
1 -1 1 -1 1 -1 1
H) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
4
1 3 6 10 15 21
I) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
14
3 1 4 1 5 9 2 6 5 3
J) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
17
8 6 7 5 3 0 9
K) 4 11 0, null 22 3, null 33 3, 1 44 4, 3 55 null, 7 66 7, 6 77 6
3
22 44 55
L) null -123 null
0
-123