Ir ao conteúdo
  • Cadastre-se
Prodigy100

C função de remoção em lista encadeada em C

Recommended Posts

Pessoal, preciso de uma ajuda. Fiz uma lista encadeada em C, mas não estou conseguindo fazer a função de remover no inicio. Alguem poderia me ajudar a corrigir essa função no meu algoritmo?De resto ta tudo certo, é so essa função de remover que ta dando pau.

#include <stdlib.h>
#include <stdio.h>

typedef struct no{
    int num;
    struct no *prox;
}No;

No* criar(){
    No *novo;
    novo=(No*)malloc(sizeof(No));
    return novo;
}

No* inicio(No* lista,int dado){
    No *novo_no;
    novo_no=criar();
    novo_no->num=dado;

    if (lista==NULL){
        lista=novo_no;
        novo_no->prox=NULL;
    }else{
        novo_no->prox=lista;
        lista=novo_no;
    }
    return lista;
}

No* fim(No* lista,int dado){
    No *novo_no;
    novo_no=criar();
    novo_no->num=dado;

    if (lista==NULL){
        lista=novo_no;
        novo_no->prox=NULL;
    }else{
        No *aux=lista;
        while (aux->prox!=NULL){
            aux=aux->prox;
        }
        aux->prox=novo_no;
        novo_no->prox=NULL;
    }
    return lista;
}

void imprimir(No* lista){
    No *aux;
        aux = lista;
    while (aux!=NULL){
        printf ("%d \n",aux->num);
        aux=aux->prox;
    }
}

void removeInicio(No* lista){
    if (lista==NULL){
        No *aux=lista;
        lista=aux->prox;
        free(aux);
    }

}

int main() {
    No *lista=NULL;

    lista=inicio(lista,30);
    lista=inicio(lista,54);
    lista=inicio(lista,15);
    removeInicio(lista);
    imprimir(lista);

    return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Prodigy100  A lógica da sua função removeInicio() está correta, só faltou você retornar a lista atualizada.

Ficou assim:

 

No* removeInicio(No* lista) {

    No* aux = lista;

    lista = aux->prox;

    free(aux);

    return lista;
}

E no main faz a chamada da função tal como para inserir:

 

lista = removeInicio(lista);

Vê se é isso q você quer

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Prodigy100 Só q é importante saber q, como você está inserindo os elementos no início da lista, sua lista, após os três elementos ser inseridos, ficará ordenada dessa forma: 15 54 30. Logo, com a função removeInicio sendo usada, o elemento 15 será removido, pois é ele q está no início da lista.

Se você inserir os mesmos elementos no fim da lista, usando sua função fim para isso, sua lista ficará assim: 30 54 15.  Logo, usando a função removeInicio, aí sim o elemento 30 será removido, pois ele é, agora, o primeiro elemento da lista

Segue um exemplo:

 

int main() {

    No *lista = NULL;

    lista = fim(lista, 30);
    lista = fim(lista, 54);
    lista = fim(lista, 15);    

    lista = removeInicio(lista); // aqui o número 30 será removido da lista

    imprimir(lista);

    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×