Danh sách liên kết đôi là một cấu trúc dữ liệu trong đó mỗi nút có một value
"liên kết" với cả hai previous
và tiếp theo nodes
trong danh sách. Ví dụ: hãy xem xét các nút sau với các giá trị 12, 99 và 37:
Ở đây, các nút có giá trị 12 và 99 trỏ đến các next
nút tương ứng của chúng , với các giá trị 99 và 37 . Nút có giá trị 37 không có next
con trỏ vì đó là nút cuối cùng trong danh sách. Tương tự, các nút có giá trị 99 và 37 trỏ đến các previous
nút tương ứng của chúng , 12 và 99 , nhưng 12 không có previous
con trỏ vì đó là nút đầu tiên trong danh sách.
Các thiết lập
Trong thực tế, các "liên kết" của một nút được triển khai như các con trỏ tới các vị trí của nút trước đó và tiếp theo trong bộ nhớ. Đối với mục đích của chúng tôi, "bộ nhớ" sẽ là một mảng các nút và vị trí của một nút sẽ là chỉ mục của nó trong mảng. Một nút có thể được coi là 3-tuple của biểu mẫu ( prev value next )
. Ví dụ trên, sau đó, có thể trông như thế này:
Nhưng nó có thể trông như thế này, thay vào đó:
Bắt đầu tại bất kỳ nút nào, bạn có thể theo previous
các liên kết (được hiển thị dưới dạng nguồn gốc của các mũi tên màu đỏ) để đến các nút trước nó và next
các liên kết (mũi tên màu xanh lá cây) để tìm các nút tiếp theo để có được tất cả các giá trị của các nút theo thứ tự: [12, 99, 37]
.
Sơ đồ đầu tiên ở trên có thể được biểu diễn trong một mảng như [[null, 12, 1], [0, 99, 2], [1, 37, null]]
. Thứ hai, sau đó, sẽ là [[2, 99, 1], [0, 37, null], [null, 12, 0]]
.
Các thách thức
Viết chương trình lấy đầu vào là một mảng các nút và chỉ mục của nút và trả về, theo thứ tự danh sách, các giá trị của các nút trong cùng một danh sách liên kết đôi.
Một biến chứng
"Bộ nhớ" sẽ không luôn chứa các nút của chỉ một danh sách. Nó có thể chứa một số danh sách:
Mảng trên chứa ba danh sách liên kết đôi, được mã hóa màu để thuận tiện cho bạn:
Các nút ở chỉ số
7
,10
,1
,4
,3
,12
(chỉ hiển thịnext
liên kết để giảm lộn xộn; bấm vào để phóng to):Với mảng này và bất kỳ chỉ mục nào trong số này, chương trình của bạn sẽ trả về, theo thứ tự, các giá trị
[0, 1, 1, 2, 3, 5, 8]
.Nút tại chỉ mục
9
:Đưa ra chỉ số
9
, chương trình của bạn sẽ trở lại[99]
.Các nút ở chỉ số
11
,8
,0
,6
,2
:Cho một trong những chỉ số này, nó sẽ trở lại
[2, 3, 5, 7, 11]
.
Quy tắc
Đầu vào
Chương trình của bạn sẽ nhận được như là đầu vào:
Danh sách 𝒏 nút (3-tuples như được mô tả ở trên), trong đó 1 ≤ 1.000, ở bất kỳ định dạng thuận tiện nào, ví dụ: một mảng các mảng, một mảng số nguyên "phẳng" có độ dài 3𝒏, v.v.
Các phần tử của 3 tuple có thể theo bất kỳ thứ tự nào :
( prev value next )
,( next prev value )
v.v. Đối với mỗi nút,prev
vànext
sẽnull
(hoặc một giá trị thuận tiện khác, ví dụ-1
), chỉ ra nút đầu tiên hoặc nút cuối cùng trong danh sách được liên kết đôi hoặc chỉ mục hợp lệ của danh sách, dựa trên 0 hoặc 1 là thuận tiện.value
sẽ là số nguyên 32 bit đã ký hoặc loại số nguyên lớn nhất mà ngôn ngữ của bạn hỗ trợ, tùy theo số nào nhỏ hơn.Chỉ số 𝒑 của một nút trong danh sách (1). Nút được chỉ định có thể là nút đầu tiên trong danh sách được liên kết đôi, nút cuối cùng, nút giữa hoặc thậm chí là nút duy nhất.
Danh sách đầu vào (1) có thể chứa dữ liệu bệnh lý (ví dụ: chu kỳ, các nút được chỉ ra bởi nhiều nút khác, v.v.), nhưng chỉ số đầu vào (2) sẽ luôn trỏ đến một nút mà từ đó một đầu ra được tạo thành tốt suy ra.
Đầu ra
Chương trình của bạn sẽ xuất ra các giá trị của các nút trong danh sách liên kết đôi mà nút tại chỉ mục 𝒑 là thành viên, theo thứ tự danh sách. Đầu ra có thể ở bất kỳ định dạng thuận tiện, nhưng dữ liệu của nó phải chỉ bao gồm các nút value
s.
Chiến thắng
Đây là môn đánh gôn . Câu trả lời ngắn nhất trong byte thắng. Tiêu chuẩn áp dụng.
Các trường hợp thử nghiệm
Dưới đây, mỗi trường hợp thử nghiệm có dạng:
X)
prev value next, prev value next, ...
index
value value value ...
... trong đó X
một chữ cái để xác định trường hợp thử nghiệm, dòng thứ hai là danh sách đầu vào, dòng thứ ba là chỉ số đầu vào dựa trên 0 và dòng thứ tư là đầu ra.
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