Invertire un elenco collegato

Invertire un elenco collegato
Come invertire un elenco collegato in C ++ è mostrato in questo tutorial Linuxhint. Quando si invertisce un elenco collegato, il percorso di collegamento viene invertito e la testa diventa la coda e la coda diventa la testa. Scambiando le posizioni dei nodi, possiamo capirlo rapidamente. In questo scambio, cambiamo semplicemente le posizioni dei nodi da sinistra a destra o viceversa.

lista collegata: Questo è un elenco collegato che vogliamo invertire.

Dopo l'elenco collegato invertito: Il seguente sarà il risultato dopo aver invertito l'elenco sopra religioso.

Nel diagramma di esempio sopra, possiamo vedere che il nodo della testa e il nodo di coda cambiano le loro posizioni quando invertiamo l'elenco collegato. Il nodo della testa, che ora è un nodo di coda, punta al nodo null perché ora è un nodo di coda.

Passi di algoritmo

  1. Creiamo un metodo principale e dichiariamo alcune variabili richieste.
  2. Quindi, il nostro prossimo passo è creare un metodo in grado di creare un elenco collegato. Questo metodo ci aiuta a creare un elenco collegato.
  3. Il prossimo passo è creare un metodo per invertire l'elenco collegato. In questo metodo, passiamo l'intero elenco collegato e questo metodo invertirà l'elenco collegato.
  4. Ora abbiamo bisogno di un altro metodo per visualizzare il nostro risultato dopo averlo invertito.
  5. Combineremo tutti questi metodi sopra nel nostro metodo principale.

Spiegheremo l'elenco collegato invertito usando qualche modulo pittorico per rendere più facile la comprensione. Quindi iniziamo con l'esempio.

Il seguente è un elenco collegato che vogliamo invertire.

Passo 1. Il nodo di colore verde è un nodo principale, che indica il primo nodo nell'avvio.

Passo 2. Nel passaggio successivo, attraverseremo l'intero elenco collegato fino a quando non avremo il puntatore nullo accanto al nodo di intestazione. Per questo, assegneremo al nodo successivo un nome temporaneo, come mostrato nel diagramma seguente.

Passaggio 3. Dato che abbiamo un nuovo nodo di riferimento chiamato "temporaneo", che può aiutarci a attraversare l'intero elenco collegato fino a quando non otteniamo il puntatore null, quindi possiamo impostare il collegamento successivo del nodo di intestazione come null, che non influirà sul collegamento Elenco come mostrato di seguito nel diagramma. Il puntatore null accanto al nodo corrente è chiamato nodo precedente.

Passaggio 4. Ora, spostiamo il nodo temporaneo sul nodo successivo e il nodo corrente al nodo temporaneo precedente. Quindi ora ci siamo trasferiti al nodo successivo. Cambiamo anche il nodo precedente da Null solo al nodo precedente del nodo corrente. Quindi ora il nodo temporaneo si occuperà di tutte le traverse fino al puntatore nullo in modo da poter impostare il collegamento del nodo corrente sul nodo precedente, e ora punta al nodo precedente, come mostrato nel diagramma seguente.

Quindi seguiamo gli stessi passaggi e, infine, otterremo un elenco collegato invertito.

Passaggio 5.

Passaggio 6.

Passaggio 7.

Passaggio 8.

Passaggio 9.

Passaggio 10.

Passaggio 11.

Passaggio 12.

Passaggio 13.

Passaggio 14. In questo passaggio, la nostra lista collegata invertita.

Programma C ++ per invertire un elenco collegato

#includere
Utilizzo dello spazio dei nomi std;
// metodo per creare il nodo
nodo struct
valore int;
nodo *NextNodePtr;
*nodeobject;
void createLinkEdList (int n);
void inverselinkedlist (nodo ** nodeobject);
void display ();
int main ()
int n, valore, articolo;
cout<<"How many nodes you want to create =>: ";
CIN >> n;
CreateLinkEdList (N);
cout<<"\nInformation in the linked list: \n";
Schermo();
cout<<"\nLinked list after reversed\n";
reverseLinkEdList (& NodeObject);
Schermo();
restituzione 0;

// Questo metodo creerà l'elenco collegato
void createLinkEdList (int n)
nodo struct *frontnode, *tempnode;
valore int, i;
nodeObject = (struct nodo *) malloc (sizeof (nodo struct));
if (nodeobject == null)
cout<<" Not enough to assing memory";
altro
cout<<"Please enter the info of node 1 (number only): ";
CIN >> valore;
nodeobject-> value = value;
nodeobject-> nextNodePtr = null;
tempNode = nodeObject;
per (i = 2; i<=n; i++)
FrontNode = (Struct Node *) Malloc (sizeof (nodo struct));
// quando nessun nodo nell'elenco collegato
if (frontNode == null)
cout<<"Memory can not be allocated";
rottura;

altro
cout<<"Please enter the info of node "<CIN >> valore;
FrontNode-> value = value;
FrontNode-> NextNodePtr = null;
tempNode-> nextNodePtr = frontNode;
tempNode = tempNode-> nextNodePtr;




void inverseLinkEdList (nodo ** nodeObject)
Struct Node *tempNode = null;
nodo struct *precedenteNode = null;
nodo struct *currentNode = ( *nodeObject);
while (currentNode != Null)
tempNode = currentNode-> nextNodePtr;
CurrentNode-> NextNodePtr = precedenteNode;
PrecedenteNode = CurrentNode;
currentNode = tempNode;

(*nodeObject) = precedenteNode;

void display ()
Struct Node *tempNode;
if (nodeobject == null)
cout<<"Linkedlist is empty";

altro
tempNode = nodeObject;
mentre (tempnode != Null)

cout<valore<<"\t";
tempNode = tempNode-> nextNodePtr;


cout <

Produzione

Quanti nodi vuoi creare =>: 6
Immettere le informazioni del nodo 1 (solo numero): 101
Inserisci le informazioni del nodo 2: 95
Inserisci le informazioni del nodo 3: 61
Inserisci le informazioni del nodo 4: 19
Inserisci le informazioni del nodo 5: 12
Inserisci le informazioni del nodo 6: 11
Informazioni nell'elenco collegato:
101 95 61 19 12 11
Elenco collegato dopo invertito
11 12 19 61 95 101

Conclusione

Questo articolo di Linuxhint ha rivisto come invertire un elenco collegato in C++. Esistono altri metodi per invertire un elenco collegato, ma questo è un metodo molto comune per invertire un elenco collegato. Spetta a te decidere come si desidera risolvere i tuoi problemi, ma generalmente la funzione dell'elenco collegato inverso dovrebbe essere un semplice ciclo con swap di puntatore.