Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Lista Encadeada - Inserir no Meio

Gente, eu consegui fazer o codigo para inserir no inicio e no fim, mas estou com dificuldade em montar a parte de inserir em qualquer lugar da lista, alguem pode me ajudar ?

#include <iostream>
#include <string>
#include <stdlib.h>

using namespace std;

struct Nolista {
    Nolista *prox;
    int dado;
};

void inicializar(Nolista *&l){
    l=NULL;
}


void inserir_inicio(Nolista *&l, int dado){
    Nolista * novo = new Nolista;
    novo->dado = dado;
    novo->prox = NULL;

    if(l == NULL){
        l = novo;
    }else{
        novo->prox = l;
        l = novo;
    }
}

void inserir_fim (Nolista *&l, int dado){
    Nolista *novo = new Nolista;
    novo->dado = dado;
    novo->prox = NULL;

    if(l == NULL){
        l = novo;
    }else{
        Nolista *aux = l;
        while(aux->prox != NULL){
            aux = aux->prox;
        }
        aux->prox = novo;
    }
}


void imprime(Nolista *l){
    int cont = 1;
    while(l != NULL){
        cout<<"Dado: " << l->dado << " " << endl;
        l = l->prox;
        cont++;
    }
}


int main () {
    Nolista *L;
    int dado, op;
    inicializar(L);

    while(op != 4){
        cout<<"--------------- LISTA ENCADEADA ---------------" << endl;
        cout<<"[1] - Inserir no Inicio" << endl;
        cout<<"[2] - Inserir no Fim" << endl;
        cout<<"[3] - Imprimir Lista" << endl;
        cout<<"[4] - Sair" << endl;
        cout<<"Opcao: ";
        cin >> op;
        system("cls");

        switch(op){
            case 1:
                cout<<"Valor a inserir no INICIO: ";
                cin>> dado;
                inserir_inicio(L,dado);
                break;
            case 2:
                cout<<"Valor a inserir no FIM: ";
                cin>> dado;
                inserir_fim(L,dado);
                break;
            case 3:
                cout << "============ LISTA ============" << endl;
                imprime(L);
                break;
            case 4:
                break;
            default:
                cout<<"Opcao invalida, tente novamente !!" << endl;
        }
    }
}
2 respostas
solução!

Boa madrugada Luanderson, bom, não existe jeito muito fácil de inserir um elemento no meio de uma lista, o que você vai precisar fazer é procurar na lista a parte dela que você quer inserir na frente, então você vai varrer até chegar no dado que você quer, o ponteiro para o próximo elemento você irá salvar em um ponteiro auxiliar e nesse elemento atual você vai apontar para uma nova struct instanciada com o dado que você quer inserir e essa struct vai apontar para o ponteiro que você salvou no auxiliar!

Hmm, saquei !!

Vou tentar mais tarde, muito obrigado !!