Menu
CoddyTech

Merge Two Sorted Lists

Recibes dos listas enlazadas simples, cada una almacenada en dos arreglos de la misma longitud. En la primera lista, el nodo i contiene el valor values1[i] y enlaza con el nodo next1[i]. La segunda lista funciona de la misma manera con next2 y values2. En ambas listas, -1 termina la lista y la cabeza es el nodo 0. Los nodos no están almacenados en el orden de la lista, así que sigue los enlaces.

Los enlaces de cada lista están ordenados de forma no decreciente. Combina las dos en una sola lista ordenada y devuelve sus valores en orden.

Función

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
el índice del nodo al que enlaza cada nodo de la primera lista, o -1 para su último nodo
values1integer-array
el valor que contiene cada nodo de la primera lista
next2integer-array
el índice del nodo al que apunta cada nodo de la segunda lista, o -1 para su último nodo
values2integer-array
el valor que contiene cada nodo de la segunda lista
Devuelveinteger-array
los valores de la lista combinada, en orden

Restricciones

  • 1 ≤ L1 ≤ 2000, donde L1 es la longitud de next1 y de values1.
  • 1 ≤ L2 ≤ 2000, donde L2 es la longitud de next2 y de values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Cada entrada de next1 es -1 o un índice de nodo de la primera lista, y cada entrada de next2 es -1 o un índice de nodo de la segunda lista.
  • Al comenzar en el nodo 0, cada lista visita cada uno de sus nodos exactamente una vez y después llega a -1. No hay ningún ciclo.
  • A lo largo de sus enlaces, cada lista está ordenada en orden no decreciente.

Ejemplos

Entrada
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Salida
[1, 2, 3, 4, 6, 7, 9]
Explicación
Siguiendo los enlaces, la primera lista visita los nodos 0, 2, 1 y lee 1, 4, 6; la segunda lee 2, 3, 7, 9. Tomar el menor de los primeros elementos cada vez da 1, 2, 3, 4, 6, 7, 9.
challenge icon

Para ir más allá

¿Puedes combinar k listas ordenadas en un tiempo de O(N log k), donde N es el número total de nodos?

Restablecer código
def mergeTwoLists(next1, values1, next2, values2):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

Salida Esperada

[1, 2, 3, 4, 6, 7, 9]