双向链接列表是一种数据结构,其中每个节点都具有value
指向列表中的previous
和的“链接” nodes
。例如,考虑以下具有值12、99和37的节点:
在此,值为12和99的节点指向其各自的next
值为99和37的节点。值为37的节点没有next
指针,因为它是列表中的最后一个节点。同样,值分别为99和37的节点指向它们各自的previous
节点12和99,但是12没有previous
指针,因为它是列表中的第一个节点。
设置
实际上,节点的“链接”被实现为指向内存中上一个和下一个节点位置的指针。对于我们的目的,“内存”将是节点的数组,而节点的位置将是其在数组中的索引。节点可以认为是形式的3元组( prev value next )
。那么,上面的示例可能如下所示:
但它看起来可能像这样:
从任何节点开始,您可以跟随previous
链接(显示为红色箭头的起点)到达其之前的节点,并跟随链接(next
绿色箭头)以查找后续节点,以便按顺序获取所有节点的值:[12, 99, 37]
。
上面的第一个图可以用数组表示[[null, 12, 1], [0, 99, 2], [1, 37, null]]
。那么第二个是[[2, 99, 1], [0, 37, null], [null, 12, 0]]
。
挑战
编写一个程序,该程序将节点数组和节点索引作为输入,并以列表顺序返回同一双链表中节点的值。
并发症
“内存”并不总是只包含一个列表的节点。它可能包含几个列表:
上面的数组包含三个双向链接列表,为方便起见用颜色编码:
在索引节点
7
,10
,1
,4
,3
,12
(只显示next
链接,以减少混乱;点击放大):给定此数组和所有这些索引,您的程序应按顺序返回values
[0, 1, 1, 2, 3, 5, 8]
。索引处的节点
9
:给定索引
9
,您的程序应返回[99]
。在索引节点
11
,8
,0
,6
,2
:给定这些索引之一,它应该返回
[2, 3, 5, 7, 11]
。
规则
输入值
您的程序将收到以下输入:
𝒏个节点的列表(如上所述,三元组),其中1≤𝒏≤1,000,采用任何方便的格式,例如,数组数组,长度为3𝒏的整数的“扁平”数组等。
的3元组的元件可以以任何顺序:
( prev value next )
,( next prev value )
,等。对于每个节点,prev
和next
将是null
(或另一种方便的值,例如-1
),表明在双重链接列表中的第一或最后一个节点,或所述有效的索引列表,可以方便地从0或1开始。value
将是有符号的32位整数或您的语言支持的最大整数类型,以较小者为准。列表中节点的索引((1)。所指示的节点可以是双向链表中的第一个节点,最后一个节点,中间节点,甚至是唯一节点。
输入列表(1)可能包含病理数据(例如,周期,多个其他节点指向的节点等),但是输入索引(2)始终指向一个节点,可以从该节点获得格式正确的单个输出推论。
输出量
您的程序应按列表顺序输出双向链接列表的节点的值,其中索引𝒑的节点是其成员。输出可以采用任何方便的格式,但是其数据必须仅包含node value
。
获奖
这是代码高尔夫球。以字节为单位的最短答案将获胜。有标准漏洞。
测试用例
下面,每个测试用例的形式为:
X)
prev value next, prev value next, ...
index
value value value ...
...其中X
有一个字母表示测试用例,第二行是输入列表,第三行是从0开始的输入索引,第四行是输出。
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