이중 링크리스트는 각 노드가 리스트의 다음 노드 value
와 "링크"를 갖는 데이터 구조입니다 . 예를 들어, 값이 12, 99 및 37 인 다음 노드를 고려하십시오.previous
nodes
여기서, 값 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
혼란을 줄이기 위해 링크하는 것은, 클릭하면 확대) :이 배열과 인덱스가 주어지면 프로그램은 값을 순서대로 반환해야합니다
[0, 1, 1, 2, 3, 5, 8]
.인덱스의 노드
9
:색인이 주어지면
9
프로그램이 리턴해야합니다[99]
.인덱스에서 노드
11
,8
,0
,6
,2
:이러한 인덱스 중 하나가 주어지면를 반환해야합니다
[2, 3, 5, 7, 11]
.
규칙
입력
당신의 프로그램은 다음과 같이 입력받을 것입니다 :
편리한 배열, 예를 들어 배열의 배열, 길이가 3𝒏 인 정수의 "평평한"배열 등의 𝒏 노드 (위에 설명 된 3 튜플) 목록 (1 ≤ 𝒏 ≤ 1,000)
: 3- 튜플 '요소들은 임의의 순서 일 수있다
( prev value next )
,( next prev value )
각 노드에 대해, 등등prev
과next
것null
(또는 다른 편리한 값, 예를 들면-1
), 이중 연결리스트의 첫 번째 또는 마지막 노드 또는 유효한 인덱스를 나타내는 편리한대로 0 또는 1을 기준으로합니다.value
부호있는 32 비트 정수 또는 언어가 지원하는 가장 큰 정수 유형 중 작은 값입니다.목록에서 노드의 인덱스 𝒑 (1). 표시된 노드는 이중 링크리스트의 첫 번째 노드, 마지막 노드, 중간 노드 또는 유일한 노드 일 수 있습니다.
입력 목록 (1) 은 병리학 적 데이터 (예 :주기, 여러 개의 다른 노드가 가리키는 노드 등)를 포함 할 수 있지만 입력 인덱스 (2)는 항상 올바르게 구성된 단일 출력이 될 수있는 노드를 가리 킵니다. 추론했다.
산출
프로그램은 인덱스 𝒑의 노드가 구성원 인 이중 링크리스트의 노드 값을리스트 순서대로 출력해야합니다. 출력은 편리한 형식 일 수 있지만 해당 데이터에는 노드 만 포함되어야합니다 value
.
승리
이것은 code-golf 입니다. 바이트 단위의 최단 답변이 이깁니다. 표준 허점이 적용됩니다.
테스트 사례
아래에서 각 테스트 사례는 다음과 같은 형식입니다.
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