Menu
CoddyTech

Reorder List

Você recebe uma lista simplesmente encadeada armazenada em dois arrays de mesmo comprimento. O nó i contém o valor values[i] e aponta para o nó next[i]; -1 encerra a lista, e a cabeça é o nó 0. Os nós não estão armazenados na ordem da lista, então siga os links.

Chame os nós na ordem da lista de L0, L1, ..., Lk. Reordene a lista para que ela fique na sequência L0, Lk, L1, Lk-1, L2, Lk-2, ...: primeiro o primeiro nó, depois o último, depois o segundo, depois o penúltimo, e assim por diante. Retorne os valores nessa nova ordem.

Função

reorderList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
o índice do nó para o qual cada nó aponta, ou -1 para o último nó
valuesinteger-array
o valor armazenado por cada nó
Retornainteger-array
os valores na ordem reordenada da lista

Restrições

  • 1 ≤ n ≤ 4000, em que n é o comprimento de next e de values.
  • -1000 ≤ values[i] ≤ 1000
  • Cada next[i] é -1 ou um índice de nó de 0 a n-1.
  • Começando no nó 0, a lista visita cada nó exatamente uma vez e então chega a -1. Não há ciclo.

Exemplos

Entrada
next = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Saída
[1, 5, 2, 4, 3]
Explicação
Seguindo os links a partir do nó 0, a lista é 1, 2, 3, 4, 5. Primeiro, último, segundo e penúltimo resultam em 1, 5, 2, 4, e o valor do meio 3 vem por último.
challenge icon

Para ir além

Você consegue reordenar os próprios links usando memória extra O(1)?

Redefinir código
def reorderList(next, values):
    # Escreva o código aqui

Teste #1

Teste #2

Teste #3

Argumentos

next = [3, 4, -1, 1, 2]
values = [1, 3, 5, 2, 4]

Saída Esperada

[1, 5, 2, 4, 3]