Tutte le sfide
Facile 0 risolte 0% di accettazione

Operazioni su una lista concatenata

Simula una lista concatenata: aggiungi a entrambe le estremità, rimuovi in testa o per valore e invertila.

Cosa imparerai

  • Aggiungere e togliere nodi a entrambe le estremità
  • Togliere il primo nodo con un dato valore
  • Invertire l'ordine di una lista

Problema

Una lista concatenata salva i valori in nodi che puntano al successivo, quindi aggiungere o togliere in testa costa poco. Simulane una che parte vuota.

Elabora le operazioni in ordine:

  • push_front x: aggiunge x in testa.
  • push_back x: aggiunge x in coda.
  • pop_front: rimuove il primo valore (ignorato se la lista è vuota).
  • remove x: rimuove il primo nodo con valore x, se esiste.
  • reverse: inverte l'ordine dei nodi.

Implementa linked_list_operations(operations).

Input

operations: Le operazioni.

Output

Restituisci i valori della lista dalla testa alla coda.

Vincoli

0 ≤ numero di operazioni ≤ 10,000

−10^9 ≤ x ≤ 10^9

Esempi

Esempio 1
Input:
operations = ["push_back 2", "push_front 1", "push_back 3", "reverse"]

Output atteso:
expected = [3, 2, 1]
Input:
std::vector<std::string> operations = {"push_back 2", "push_front 1", "push_back 3", "reverse"};

Output atteso:
std::vector<long long> expected = {3, 2, 1};
Input:
string[] operations = new string[] {"push_back 2", "push_front 1", "push_back 3", "reverse"};

Output atteso:
long[] expected = new long[] {3, 2, 1};

Spiegazione

La lista diventa 1 → 2 → 3 e invertendola si ottiene [3, 2, 1].

Esempio 2
Input:
operations = ["push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"]

Output atteso:
expected = [5]
Input:
std::vector<std::string> operations = {"push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"};

Output atteso:
std::vector<long long> expected = {5};
Input:
string[] operations = new string[] {"push_back 5", "push_back 7", "push_back 5", "remove 5", "pop_front"};

Output atteso:
long[] expected = new long[] {5};

Spiegazione

remove toglie solo il primo 5 e resta 7 → 5; poi pop_front toglie 7: [5].

Come affrontarlo

Prova prima da solo, poi apri un suggerimento alla volta.

Suggerimento 1

Un tipo di lista con inserimenti economici in testa e in coda (std::list, LinkedList<T>, deque) fa quasi tutto il lavoro.

Suggerimento 2

remove elimina solo la prima corrispondenza, e pop_front su una lista vuota non fa nulla.

Suggerimento 3

Dopo l'inversione, l'altra estremità diventa la testa per i push e pop successivi.

Complessità attesa

tempo O(n²), spazio aggiuntivo O(n)

Riferimenti

Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.

Impara dagli altri

Soluzioni della community

Nessuna soluzione pubblicata. Risolvi questa sfida per condividere la prima.