Problema
Uma lista ligada guarda valores em nós que apontam para o próximo, então adicionar ou remover no início é barato. Simule uma que começa vazia.
Processe as operações em ordem:
push_front x: adiciona x no início.push_back x: adiciona x no fim.pop_front: remove o primeiro valor (ignorado se a lista estiver vazia).remove x: remove o primeiro nó com valor x, se existir.reverse: inverte a ordem dos nós.
Implemente linked_list_operations(operations).
Entrada
operations: As operações.
Saída
Retorne os valores da lista do início ao fim.
Restrições
0 ≤ número de operações ≤ 10,000
−10^9 ≤ x ≤ 10^9
Exemplos
Entrada:
operations = ["push_back 2", "push_front 1", "push_back 3", "reverse"]
Saída esperada:
expected = [3, 2, 1]
Entrada:
std::vector<std::string> operations = {"push_back 2", "push_front 1", "push_back 3", "reverse"};
Saída esperada:
std::vector<long long> expected = {3, 2, 1};
Entrada:
string[] operations = new string[] {"push_back 2", "push_front 1", "push_back 3", "reverse"};
Saída esperada:
long[] expected = new long[] {3, 2, 1};
Explicação
A lista vira 1 → 2 → 3, e invertê-la dá [3, 2, 1].
Entrada:
operations = ["push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"]
Saída esperada:
expected = [5]
Entrada:
std::vector<std::string> operations = {"push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"};
Saída 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"};
Saída esperada:
long[] expected = new long[] {5};
Explicação
remove tira só o primeiro 5 e sobra 7 → 5; depois pop_front tira o 7: [5].
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Um tipo de lista com inserção barata nas duas pontas (std::list, LinkedList<T>, deque) faz quase todo o trabalho.
Dica 2
remove apaga só a primeira ocorrência, e pop_front em lista vazia não faz nada.
Dica 3
Depois de inverter, a outra ponta passa a ser o início para os próximos push e pop.
Complexidade esperada
tempo O(n²), espaço extra O(n)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.