Non capisco perché l'eliminazione alla fine di una singola lista collegata vada in O (1) volta, come dice il wikipedia article.Perché si sta eliminando una singola lista collegata O (1)?
Un singolo elenco collegato è costituito da nodi. Un nodo contiene un tipo di dati e un riferimento al nodo successivo. Il riferimento dell'ultimo nodo nell'elenco collegato è nullo.
-------------- -------------- --------------
| data | ref | -> | data | ref | -> ... -> | data | ref |
-------------- -------------- --------------
Posso effettivamente rimuovere l'ultimo nodo in O (1). Ma in tal caso non si imposta il riferimento del nuovo ultimo nodo, quello precedente, a null poiché contiene ancora il riferimento all'ultimo nodo eliminato. Quindi mi chiedevo se lo trascurassero nell'analisi del tempo di esecuzione? O è consueto che tu non debba cambiarlo dal momento che il riferimento, beh, non punta a nulla, e tale è visto come nulla?
Perché se non fosse trascurato, direi che l'eliminazione è O (n). Dal momento che devi scorrere l'intera lista per arrivare al nuovo nodo e impostare il suo riferimento anche su null. Solo in una doppia lista collegata sarebbe davvero O (1).
-edit- Forse questo punto di vista dà un po 'più di chiarezza. Ma vedo "cancellazione di un nodo" cancellando con successo il nodo stesso e impostando il riferimento precedente su null.
Vedo due riferimenti a O (1) in quell'articolo di Wikipedia, ma nessuno dei due afferma che la rimozione dell'ultimo nodo in un elenco collegato singolarmente sia un'operazione O (1). Presumibilmente, si sta già tenendo un puntatore al nodo precedente quando si tenta la cancellazione, necessario per eliminare qualsiasi nodo tranne il primo. –