Daftar tertaut ganda adalah struktur data di mana setiap node memiliki value
serta "tautan" ke kedua previous
dan berikutnya nodes
dalam daftar. Misalnya, pertimbangkan simpul berikut dengan nilai 12, 99, dan 37:
Di sini, node dengan nilai 12 dan 99 menunjuk ke masing-masing next
node, dengan nilai 99 dan 37 . Node dengan nilai 37 tidak memiliki next
pointer karena ini adalah node terakhir dalam daftar. Demikian juga, node dengan nilai 99 dan 37 menunjuk ke masing-masing previous
node, 12 dan 99 , tetapi 12 tidak memiliki previous
pointer karena itu adalah simpul pertama dalam daftar.
Pengaturan
Dalam praktiknya, "tautan" simpul diimplementasikan sebagai petunjuk ke lokasi simpul sebelumnya dan berikutnya dalam memori. Untuk keperluan kita, "memori" akan menjadi array node dan lokasi node akan menjadi indeksnya dalam array. Node dapat dianggap sebagai 3-tupel dari formulir ( prev value next )
. Contoh di atas, maka, mungkin terlihat seperti ini:
Tapi ini mungkin terlihat seperti ini:
Mulai dari sembarang simpul, Anda dapat mengikuti previous
tautan (ditampilkan sebagai asal dari panah merah) untuk sampai ke simpul yang mendahuluinya dan next
tautan (panah hijau) untuk menemukan simpul berikutnya untuk mendapatkan semua nilai simpul secara berurutan: [12, 99, 37]
.
Diagram pertama di atas dapat direpresentasikan dalam array sebagai [[null, 12, 1], [0, 99, 2], [1, 37, null]]
. Maka, yang kedua adalah [[2, 99, 1], [0, 37, null], [null, 12, 0]]
.
Tantangan
Tulis sebuah program yang mengambil input array node dan indeks node dan mengembalikan, dalam urutan daftar, nilai-nilai node dalam daftar yang ditautkan dua kali lipat.
Komplikasi
"Memori" tidak akan selalu berisi node hanya dari satu daftar. Mungkin berisi beberapa daftar:
Array di atas berisi tiga daftar tertaut ganda, kode warna untuk kenyamanan Anda:
Node di indeks
7
,10
,1
,4
,3
,12
(hanya menampilkannext
link untuk mengurangi kekacauan; klik untuk memperbesar):Dengan array ini dan salah satu dari indeks ini, program Anda harus mengembalikan, sesuai urutan, nilainya
[0, 1, 1, 2, 3, 5, 8]
.Node pada indeks
9
:Diberikan indeks
9
, program Anda harus kembali[99]
.Node di indeks
11
,8
,0
,6
,2
:Mengingat salah satu dari indeks ini, itu harus kembali
[2, 3, 5, 7, 11]
.
Aturan
Memasukkan
Program Anda akan menerima sebagai masukan:
Daftar 𝒏 simpul (3-tupel seperti dijelaskan di atas), di mana 1 ≤ 𝒏 ≤ 1.000, dalam format apa pun yang mudah digunakan, misalnya array array, array "flat" bilangan bulat dengan panjang 3𝒏, dll.
Elemen 3-tupel mungkin dalam urutan apa pun:
( prev value next )
,,( next prev value )
dll. Untuk setiap node,prev
dannext
akan menjadinull
(atau nilai lain yang nyaman, misalnya-1
), menunjukkan node pertama atau terakhir dalam daftar yang ditautkan ganda, atau indeks yang valid dari daftar, baik berbasis 0 atau 1 sesuai nyaman.value
akan menjadi bilangan bulat 32-bit yang ditandatangani atau jenis bilangan bulat terbesar yang didukung bahasa Anda, mana yang lebih kecil.Indeks 𝒑 dari sebuah simpul dalam daftar (1). Node yang ditunjukkan mungkin merupakan simpul pertama dalam daftar yang tertaut ganda, simpul terakhir, simpul tengah, atau bahkan satu-satunya simpul.
Daftar input (1) dapat berisi data patologis (mis. Siklus, simpul yang ditunjuk oleh banyak simpul lain, dll.), Tetapi indeks input (2) akan selalu menunjuk ke suatu simpul dari mana satu output tunggal yang terbentuk dapat disimpulkan.
Keluaran
Program Anda harus menampilkan nilai-nilai node dari daftar yang ditautkan ganda di mana simpul pada indeks 𝒑 adalah anggota, dalam urutan daftar. Output dapat dalam format apa pun yang nyaman, tetapi datanya harus hanya menyertakan node value
s.
Kemenangan
Ini adalah kode-golf . Jawaban terpendek dalam byte menang. Celah standar berlaku.
Uji kasus
Di bawah ini, setiap test case berbentuk:
X)
prev value next, prev value next, ...
index
value value value ...
... di mana X
adalah huruf untuk mengidentifikasi kasus uji, baris kedua adalah daftar input, baris ketiga adalah indeks input berbasis 0, dan baris keempat adalah output.
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