Lista vinculada: Esta é uma lista vinculada que queremos reverter.
Após a lista vinculada reversa: O abaixo será o resultado depois de reverter a lista acima ligada.
No diagrama de exemplo acima, podemos ver que o nó da cabeça e o nó da cauda mudam suas posições quando revertemos a lista vinculada. O nó da cabeça, que agora é um nó da cauda, aponta para o nó nulo porque agora é um nó da cauda.
Etapas do algoritmo
Vamos explicar a lista vinculada invertida usando algum formulário pictórico para facilitar o entendimento. Então, vamos começar com o exemplo.
Abaixo é uma lista vinculada que queremos reverter.
Passo 1. O nó de cor verde é um nó da cabeça, que aponta para o primeiro nó na startup.
Passo 2. Na próxima etapa, atravessaremos toda a lista vinculada até que não obteremos o ponteiro nulo ao lado do nó do cabeçalho. Para isso, vamos atribuir ao próximo nó um nome temporário, como mostrado no diagrama abaixo.
etapa 3. Como temos um novo nó de referência chamado "temporário", que pode nos ajudar a atravessar toda a lista vinculada até que não obtenhamos o ponteiro nulo, para que possamos definir o próximo link do nó do cabeçalho como nulo, o que não afetará o vinculado o vinculado Lista como mostrado abaixo no diagrama. O ponteiro nulo ao lado do nó atual é chamado de nó anterior.
Passo 4. Agora, movemos o nó temporário para o próximo nó e o nó atual para o nó temporário anterior. Então agora nos mudamos para o próximo nó. Também mudamos o nó anterior de Null para apenas o nó anterior do nó atual. Então agora o nó temporário cuidará de todas as travessias até o ponteiro nulo, para que possamos definir o link do nó atual para o nó anterior, e agora está apontando para o nó anterior, como mostrado no diagrama abaixo.
Então, seguimos as mesmas etapas e, finalmente, teremos uma lista vinculada invertida.
Etapa 5.
Etapa 6.
Etapa 7.
Etapa 8.
Etapa 9.
Etapa 10.
Etapa 11.
Etapa 12.
Etapa 13.
Etapa 14. Nesta etapa, nossa lista vinculada reverteu.
Programa C ++ para reverter uma lista vinculada
#incluir
usando namespace std;
// método para criar o nó
Nó da estrutura
int valor;
Nó *NextNodePtr;
*nodeObject;
Void CreateLinkedList (int n);
vazio reverselinkedlist (node ** nodeObject);
Void Display ();
int main ()
int n, valor, item;
cout<<"How many nodes you want to create =>: ";
CIN >> n;
CreateLinkedList (n);
cout<<"\nInformation in the linked list: \n";
mostrar();
cout<<"\nLinked list after reversed\n";
reverselinkedlist (& nodeObject);
mostrar();
retornar 0;
// Este método criará a lista vinculada
Void CreateLinkedList (int n)
Nó da estrutura *FrontNode, *tempnode;
int valor, i;
nodeObject = (nó da estrutura *) Malloc (sizeof (nó da estrutura));
if (nodeObject == NULL)
cout<<" Not enough to assing memory";
outro
cout<<"Please enter the info of node 1 (number only): ";
CIN >> valor;
nodeObject-> value = value;
nodeObject-> nextNodePtr = null;
tempnode = nodeObject;
para (i = 2; i<=n; i++)
FrontNode = (Nó da estrutura *) Malloc (sizeof (nó da estrutura));
// quando nenhum nó na lista vinculada
if (frontNode == null)
cout<<"Memory can not be allocated";
quebrar;
outro
cout<<"Please enter the info of node "<CIN >> valor;
FrontNode-> value = value;
FrontNode-> nextNodePtr = null;
tempnode-> nextNodePtr = FrontNode;
tempnode = tempnode-> nextNodePtr;
Void ReverselinkedList (nó ** NodeObject)
Nó da estrutura *tempnode = null;
Nó da estrutura *anteriorNode = null;
Nó da estrutura *currentNode = ( *nodeObject);
while (CurrentNode != Null)
tempnode = currentNode-> nextNodePtr;
currentNode-> nextNodePtr = anteriorNode;
anteriornode = currentNode;
currentNode = tempnode;
(*nodeObject) = anteriorNode;
Void Display ()
Nó da estrutura *tempnode;
if (nodeObject == null)
cout<<"Linkedlist is empty";
outro
tempnode = nodeObject;
enquanto (tempnode != Nulo)
cout<valor<<"\t";
tempnode = tempnode-> nextNodePtr;
cout <
Saída
Quantos nós você deseja criar =>: 6Conclusão
Este artigo do Linuxhint revisou como reverter uma lista vinculada em C++. Existem outros métodos para reverter uma lista vinculada, mas esse é um método muito comum para reverter uma lista vinculada. Cabe a você decidir como você deseja resolver seus problemas, mas geralmente a função de lista vinculada reversa deve ser um loop simples com swaps de ponteiro.