Problema
Una lista enlazada guarda los valores en nodos que apuntan al siguiente, así que añadir o quitar al principio es barato. Simula una que empieza vacía.
Procesa las operaciones en orden:
push_front x: añade x al principio.push_back x: añade x al final.pop_front: elimina el primer valor (se ignora si la lista está vacía).remove x: elimina el primer nodo con valor x, si existe.reverse: invierte el orden de los nodos.
Implementa linked_list_operations(operations).
Entrada
operations: Las operaciones.
Salida
Devuelve los valores de la lista del principio al final.
Restricciones
0 ≤ número de operaciones ≤ 10,000
−10^9 ≤ x ≤ 10^9
Ejemplos
Entrada:
operations = ["push_back 2", "push_front 1", "push_back 3", "reverse"]
Salida esperada:
expected = [3, 2, 1]
Entrada:
std::vector<std::string> operations = {"push_back 2", "push_front 1", "push_back 3", "reverse"};
Salida esperada:
std::vector<long long> expected = {3, 2, 1};
Entrada:
string[] operations = new string[] {"push_back 2", "push_front 1", "push_back 3", "reverse"};
Salida esperada:
long[] expected = new long[] {3, 2, 1};
Explicación
La lista queda 1 → 2 → 3, y al invertirla da [3, 2, 1].
Entrada:
operations = ["push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"]
Salida esperada:
expected = [5]
Entrada:
std::vector<std::string> operations = {"push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"};
Salida esperada:
std::vector<long long> expected = {5};
Entrada:
string[] operations = new string[] {"push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"};
Salida esperada:
long[] expected = new long[] {5};
Explicación
remove solo quita el primer 5 y queda 7 → 5; luego pop_front quita el 7: [5].
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
Un tipo de lista con inserción barata en ambos extremos (std::list, LinkedList<T>, deque) hace casi todo el trabajo.
Pista 2
remove borra solo la primera coincidencia, y pop_front sobre una lista vacía no hace nada.
Pista 3
Al invertir, el otro extremo pasa a ser el principio para los push y pop siguientes.
Complejidad esperada
tiempo O(n²), espacio extra O(n)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.