È comune ad avere bisogno di invertire una lista concatenata, ma può essere difficile per farlo correttamente. Una delle soluzioni più semplici è quello di eseguire un'iterazione del ciclo, invertendo ogni puntatore. Questo pseudocodice viene illustrato come eseguire questo processo mentre tenere traccia delle variabili necessarie. Lo pseudocodice è abbastanza generico che si dovrebbe essere in grado di adattarlo a qualsiasi lingua è il codice in.
Istruzioni
1
Controllare i casi limite semplice. Se il puntatore di testa è null, l'elenco è vuoto e nessun lavoro deve essere fatto. Se prossima puntatore della testa è null, c'è un solo elemento nell'elenco, quindi invertire non fa nulla.
Se testa = null quindi tornare
Se testa -> next = null quindi restituire
2
Inizializzare tre puntatori: prev, corrente e quello successivo. \"Prev\" e \"current\" dovrebbe puntare verso il nodo principale dell'elenco. \"Next\" dovrebbe puntare al secondo nodo guardando il puntatore nel nodo principale.
puntatore prev = testa
VAI
puntatore corrente = testa
VAI
puntatore next = testa -> next;
3
Impostare puntatore prossimo del nodo testa su null. Il nodo principale diventerà l'ultimo nodo nell'elenco, quindi non ci sarà nessun nodi dopo di esso.
testa -> next = null
4
Scorrere l'elenco invertendo la direzione dei puntatori. I tre puntatori inizializzati prima vengono utilizzati per tenere traccia della posizione corrente nell'elenco.
mentre avanti! = null //A puntatore successivo null significa che abbiamo raggiunto la fine dell'elenco
corrente = prossimo //Advance il puntatore corrente
Next = current -> prossimo //Advance il puntatore del mouse
corrente -> next = prev //Point nodo corrente al nodo precedente, invertendo il link
Prev = corrente //Advance l'ultimo puntatore
fine mentre
5
Punto variabile testa al nuovo capo dell'elenco.
testa = corrente
Consigli & Avvertenze
- Se avete bisogno di scorrere un elenco collegato in entrambe le direzioni per implementare una lista doppiamente concatenata.