Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Aula de estrutura de dados
- * Assunto: Lista Encadeada
- * Problema: Inverter lista usando somente ponteiros
- * Autor: Luan
- */
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- struct elemento{
- int valor;
- struct elemento* prox;
- };
- typedef struct elemento Elemento;
- class ListaEncadeada{
- private:
- Elemento* inicio;
- public:
- void cria(){ // inicializa a lista com inicio valor = 0 e prox nulo;
- Elemento* novo = (Elemento*) malloc(sizeof(Elemento));
- novo->valor = 0;
- novo->prox = NULL;
- inicio = novo; // inicio fica sendo o endereco desse novo elemento
- }
- void insere(int i){
- Elemento* novo = (Elemento*) malloc(sizeof(Elemento)); // cria um elemento pra inserir na lista
- novo->valor = i;
- novo->prox = NULL; // e coloca como proximo nulo
- /* em seguida eu vejo se o inicio ta com valor 0 (valor inicial que eu criei)
- se tiver, é pq naquele inicio nao foi colocado nada ainda, ou seja,
- é a primeira vez que ta sendo inserior */
- if (inicio->valor == 0)
- {
- cout << "aadsa";
- inicio = novo; // inicio fica sendo o endereco desse novo elementou que tem valor i
- }
- else // quando nao é a primeira vez inserida
- {
- Elemento* atual = inicio;
- while(atual->prox != NULL)
- atual = atual->prox;
- atual->prox = novo;
- cout << "inserido com sucesso!" << endl;
- }
- }
- void mostraLista(){
- Elemento* atual = inicio;
- while(atual){
- cout << atual->valor << " ";
- atual = atual->prox;
- }
- }
- void inverte(){
- Elemento* sucessor = inicio; // sucessor é para apontar pro elementor da frente
- 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)
- Elemento* proximo; // variavel temporaria para salvar o prox do elemento que esta sendo troca o valor do prox;
- while(sucessor->prox)
- {
- proximo = sucessor->prox; // salva o elemento seguinte
- sucessor->prox = anterior; // coloca pro prox ser o anterior
- anterior = sucessor; // anterio assume agora a posicao atual, para que o da frente aponte pro de tras(q é o atual)
- sucessor = proximo; // sucessor fica sendo o proximo, para que avance para o proximo elemento seguinte
- }
- sucessor->prox = anterior; // no final, o utimo->prox == NULL, entao é preociso coloca para ele receber o anterior fora do while
- inicio = sucessor; // inicio tem que ser agora o ultimo, ou seja, esse ultimo atualizado ;
- }
- }; // fimm calss
- int main()
- {
- ListaEncadeada list;
- list.cria();
- list.insere(1);
- list.insere(2);
- list.insere(3);
- list.mostraLista();
- list.inverte();
- cout << "\n\nInvetrido:\n";
- list.mostraLista();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement