Çift bağlantılı bir liste, her bir düğümün value
hem listede hem de previous
sonrakine "bağlantıları" olduğu bir veri yapısıdır nodes
. Örneğin, 12, 99 ve 37 değerlerine sahip aşağıdaki düğümleri göz önünde bulundurun:
Burada, 12 ve 99next
değerlerine sahip düğümler, 99 ve 37 değerleriyle ilgili düğümlerine işaret eder . 37 değerine sahip düğümde next
işaretçi yoktur, çünkü listedeki son düğümdür. Benzer şekilde, 99 ve 37 değerlerine sahip düğümlerin ilgili previous
düğümlerine ( 12 ve 99) işaret eder , ancak 12'de hiçbir previous
işaretçi yoktur, çünkü listedeki ilk düğümdür.
Kurulum
Uygulamada, bir düğümün "bağlantıları" önceki ve sonraki düğümün bellekteki konumlarına işaretçi olarak uygulanır. Bizim amacımız için, "bellek" bir düğüm dizisi olacak ve bir düğümün konumu dizideki dizini olacaktır. Bir düğüm, formun 3 parçası olarak düşünülebilir ( prev value next )
. Yukarıdaki örnek, aşağıdaki gibi görünebilir:
Ancak bunun yerine şöyle görünebilir:
Herhangi bir düğümden başlayarak, previous
ondan önce gelen düğümlere ulaşmak için bağlantıları (kırmızı okların kökenleri olarak gösterilir) ve next
tüm düğümlerin değerlerini sırayla almak için sonraki düğümleri bulmak için bağlantıları (yeşil oklar) takip edebilirsiniz: [12, 99, 37]
.
Yukarıdaki ilk diyagram bir dizide olarak gösterilebilir [[null, 12, 1], [0, 99, 2], [1, 37, null]]
. O zaman ikincisi olurdu [[2, 99, 1], [0, 37, null], [null, 12, 0]]
.
Meydan okuma
Bir düğüm dizisini ve bir düğümün dizinini girdi olarak alan ve aynı çift bağlantılı bağlantıdaki düğümlerin değerlerini döndüren bir program yazın.
Bir komplikasyon
"Bellek" her zaman sadece bir listenin düğümlerini içermez. Birkaç liste içerebilir:
Yukarıdaki dizi, size kolaylık sağlamak için renkle kodlanmış üç çift bağlantılı liste içerir:
Endeksler de düğümleri
7
,10
,1
,4
,3
,12
(sadece gösterennext
karışıklığı azaltmak için bağlantılar; büyütmek için tıklayın):Bu dizi ve bu dizinlerden herhangi biri göz önüne alındığında, programınız değerleri sırayla döndürmelidir
[0, 1, 1, 2, 3, 5, 8]
.Dizindeki düğüm
9
:Dizin verildiğinde,
9
programınız geri dönmelidir[99]
.Dizinler düğümleri
11
,8
,0
,6
,2
:Bu dizinlerden biri göz önüne alındığında, geri dönmelidir
[2, 3, 5, 7, 11]
.
kurallar
Giriş
Programınız girdi olarak alacaktır:
1 ≤ 𝒏 ≤ 1,000, herhangi bir uygun biçimde, örneğin bir dizi dizisi, 3𝒏 uzunluğunda "düz" bir tamsayı dizisi vb.
: 3-küpe elemanlar herhangi bir sırayla olabilir
( prev value next )
,( next prev value )
her bir düğüm için, vbprev
venext
olacaknull
(veya başka bir elverişli bir değer, örneğin-1
), bir çift bağlı bir listede ilk veya son düğümü veya bir geçerli endeksını belirten listesi, uygun olarak 0- veya 1 tabanlı.value
imzalı bir 32 bit tam sayı veya dilinizin desteklediği en büyük tam sayı türü (hangisi daha küçükse) olacaktır.Listedeki bir düğümün indeksi 𝒑 (1). Belirtilen düğüm, çift bağlantılı bir listedeki ilk düğüm, son düğüm, bir orta düğüm veya hatta tek düğüm olabilir.
Giriş listesi (1) patolojik veriler içerebilir (örn. Döngüler, diğer birçok düğümle gösterilen düğümler, vb.), Ancak giriş endeksi (2) her zaman tek bir iyi biçimlendirilmiş çıktının olabileceği bir düğüme işaret edecektir. çıkarılabilir.
Çıktı
Programınız, 𝒑 dizinindeki düğümün üye olduğu çift bağlantılı bağlantı listesindeki düğümlerin değerlerini liste sırasıyla çıkarmalıdır. Çıktı herhangi bir uygun biçimde olabilir, ancak verileri yalnızca düğümleri içermelidir value
.
Kazanan
Bu kod golfü . Bayt cinsinden en kısa cevap kazanır. Standart boşluklar geçerlidir.
Test senaryoları
Aşağıda, her test durumu aşağıdaki şekildedir:
X)
prev value next, prev value next, ...
index
value value value ...
... burada X
test senaryosunu tanımlayan bir harf, ikinci satır giriş listesidir, üçüncü satır 0 tabanlı giriş endeksidir ve dördüncü satır çıktıdır.
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