Advertisement
DarknessRdg

Lista Encadeada - inverter usando ponteiro

Dec 15th, 2018
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.77 KB | None | 0 0
  1. /*
  2.  * Aula de estrutura de dados
  3.  * Assunto:  Lista Encadeada
  4.  * Problema: Inverter lista usando somente ponteiros
  5.  * Autor: Luan
  6. */
  7. #include <stdlib.h>
  8. #include <iostream>
  9.  
  10. using namespace std;
  11.  
  12. struct elemento{
  13.     int valor;
  14.     struct elemento* prox;
  15. };
  16.  
  17. typedef struct elemento Elemento;
  18.  
  19.  
  20. class ListaEncadeada{
  21.     private:
  22.         Elemento* inicio;
  23.     public:
  24.         void cria(){ // inicializa a lista com inicio valor = 0 e prox nulo;
  25.             Elemento* novo = (Elemento*) malloc(sizeof(Elemento));
  26.             novo->valor = 0;
  27.             novo->prox = NULL;
  28.             inicio = novo; // inicio fica sendo o endereco desse novo elemento
  29.         }
  30.  
  31.         void insere(int i){
  32.             Elemento* novo = (Elemento*) malloc(sizeof(Elemento)); // cria um  elemento pra inserir na lista
  33.             novo->valor = i;
  34.             novo->prox = NULL; // e coloca como proximo nulo
  35.            
  36.             /* em seguida eu vejo se o inicio ta com valor 0 (valor inicial que eu criei)
  37.             se tiver, é pq naquele inicio nao foi colocado nada ainda, ou seja,
  38.             é a primeira vez que ta sendo inserior */
  39.             if (inicio->valor == 0)
  40.             {
  41.                 cout << "aadsa";
  42.                 inicio = novo; // inicio fica sendo o endereco desse novo elementou que tem valor i
  43.             }
  44.             else // quando nao é a primeira vez inserida
  45.             {
  46.                 Elemento* atual = inicio;
  47.                 while(atual->prox != NULL)
  48.                     atual = atual->prox;
  49.            
  50.                 atual->prox = novo;
  51.                 cout << "inserido com sucesso!" << endl;
  52.             }
  53.         }
  54.  
  55.         void mostraLista(){
  56.             Elemento* atual = inicio;
  57.             while(atual){
  58.                 cout << atual->valor << " ";
  59.                 atual = atual->prox;
  60.             }
  61.         }
  62.        
  63.         void inverte(){
  64.             Elemento* sucessor = inicio; // sucessor é para apontar pro elementor da frente
  65.             Elemento* anterior = NULL; // aponta para o elemento de tras (e comeca como NULL pq o primeiro vai ser o ultimo , ou seja vai ser o nulo)
  66.             Elemento* proximo; // variavel temporaria para salvar o prox do elemento que esta sendo troca o valor do prox;
  67.            
  68.             while(sucessor->prox)
  69.             {
  70.                 proximo = sucessor->prox; // salva o elemento seguinte
  71.                 sucessor->prox = anterior; // coloca pro prox ser o anterior
  72.                 anterior = sucessor; // anterio assume agora a posicao atual, para que o da frente aponte pro de tras(q é o atual)
  73.                 sucessor = proximo; // sucessor fica sendo o proximo, para que avance para o proximo elemento seguinte
  74.             }
  75.            
  76.             sucessor->prox = anterior; // no final, o utimo->prox == NULL, entao é preociso coloca para ele receber o anterior fora do while
  77.            
  78.             inicio = sucessor; // inicio tem que ser agora o ultimo, ou seja, esse ultimo atualizado ;
  79.         }      
  80.        
  81.        
  82. }; // fimm calss
  83.  
  84.  
  85. int main()
  86. {
  87.     ListaEncadeada list;
  88.  
  89.     list.cria();
  90.     list.insere(1);
  91.     list.insere(2);
  92.     list.insere(3);
  93.    
  94.     list.mostraLista();
  95.    
  96.     list.inverte();
  97.     cout << "\n\nInvetrido:\n";
  98.     list.mostraLista();
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement