Menu
CoddyTech

Reverse Nodes in k-Group

DifícilLista enlazadapython iconjava iconcpp iconc iconjs icon+10

Una lista enlazada simple se almacena en dos arreglos de la misma longitud. El nodo i contiene values[i] y enlaza con el nodo next[i]; -1 indica el final de la lista, y la cabeza es el nodo 0. Los nodos pueden estar almacenados en cualquier orden, así que sigue los enlaces, no el orden del arreglo.

Invierte la lista en grupos de k nodos: los primeros k nodos quedan invertidos, después los siguientes k, y así sucesivamente. Un último grupo con menos de k nodos conserva su orden. Devuelve los valores en el nuevo orden de la lista.

Función

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
el índice del nodo al que enlaza cada nodo, o -1 para el último nodo
valuesinteger-array
el valor que contiene cada nodo
kinteger
el número de nodos que se invertirán en cada grupo
Devuelveinteger-array
los valores en el orden de la nueva lista

Restricciones

  • 1 ≤ L ≤ 5000, donde L es la longitud de next y de values.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Cada next[i] es -1 o un índice de nodo de 0 a L-1.
  • Empezando en el nodo 0, la lista visita cada nodo exactamente una vez y después llega a -1. No hay ningún ciclo.

Ejemplos

Entrada
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Salida
[2, 1, 4, 3, 5]
Explicación
La lista se lee 1, 2, 3, 4, 5 (nodos 0, 2, 4, 1, 3). Los pares 1, 2 y 3, 4 están invertidos, y 5 por sí solo es más corto que k = 2, así que se queda al final.
challenge icon

Para ir más allá

¿Puedes escribirlo de forma recursiva, invirtiendo un grupo y recurriendo sobre el resto de la lista? ¿Cuánta memoria adicional utiliza?

Restablecer código
def reverseKGroup(next, values, k):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

[2, 1, 4, 3, 5]