Menu
CoddyTech

Reverse Nodes in k-Group

DifícilLista ligadapython iconjava iconcpp iconc iconjs icon+10

Uma lista simplesmente encadeada é armazenada em dois arrays de mesmo tamanho. O nó i contém values[i] e aponta para o nó next[i]; -1 encerra a lista, e a cabeça é o nó 0. Os nós podem ser armazenados em qualquer ordem, então siga os ponteiros, não a ordem dos arrays.

Inverta a lista em grupos de k nós: os primeiros k nós ficam invertidos, depois os próximos k, e assim por diante. Um último grupo com menos de k nós mantém sua ordem. Retorne os valores na nova ordem da lista.

Função

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
o índice do nó ao qual cada nó está ligado, ou -1 para o último nó
valuesinteger-array
o valor armazenado por cada nó
kinteger
o número de nós em cada grupo a inverter
Retornainteger-array
os valores na nova ordem da lista

Restrições

  • 1 ≤ L ≤ 5000, onde L é o comprimento de next e de values.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Cada next[i] é -1 ou um índice de nó de 0 a L-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 = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Saída
[2, 1, 4, 3, 5]
Explicação
A lista é lida como 1, 2, 3, 4, 5 (nós 0, 2, 4, 1, 3). Os pares 1, 2 e 3, 4 estão invertidos, e apenas 5 é menor que k = 2, então permanece no final.
challenge icon

Para ir além

Você consegue escrevê-lo recursivamente, invertendo um grupo e chamando a recursão para o restante da lista? Quanta memória extra isso usa?

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

Teste #1

Teste #2

Teste #3

Argumentos

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

Saída Esperada

[2, 1, 4, 3, 5]