Come ho capito il tuo post, ci sono due domande qui. Uno è come costruire un modello mentale di una lista collegata. L'altro è come gestire tutti i controlli per null
.
Se vuoi che un modello semplice rifletta sugli elenchi collegati, dovrebbe essere questo:
Hai un nodo importante che è la testa, e da lì inizi a passare da un nodo all'altro fino a raggiungere la fine. È come essere dentro un treno. Vai dal carro al carro fino a raggiungere l'ultimo. Aggiungere ed eliminare nodi è come aggiungere e rimuovere i vagoni dal treno. Devi collegare la fine di un nodo (o carro) al nodo successivo (o carro).
Nell'elenco collegato sono presenti nodi che mantengono un riferimento al nodo successivo. Ecco come ti muovi nella lista. L'ultimo nodo non ha più nodi dopo di esso e devi segnarlo in qualche modo. Nel treno, quando non vedi più carri, sei nell'ultimo carro. Nell'elenco collegato quando vedi un riferimento null
sai che non ci sono più nodi.
Quindi null
è importante perché segna l'ultimo nodo, il nodo che non si collega a nessun altro nodo. Ma null
è anche un po 'pericoloso. Il tuo codice è generale Passi da un node
a node.next
. E se node.next
punta a nulla, se fai node.next.next
ottieni una NullPointerException che blocca il tuo programma.
Non c'è molto che puoi fare se vuoi che il tuo codice funzioni, ma per controllare null
in vari punti. Puoi separare il controllo Null ed estrarlo in qualche metodo e avere qualcosa come if (hasNext(node)) {
o if (node.hasNext()) {
, ecc. E spostare lì la verifica null
. In questo modo il tuo codice è più esplicito nel dire cosa sta facendo invece di sapere per quali sono tutti quei controlli per null
. Ma come ho detto, non c'è molto che tu possa fare. Questa è la natura dell'elenco collegato.