Olá galera, tudo bem, espero está fazendo esse tópico corretamente pois sou novo aqui... Enfim, é o seguinte, estou com um problema no meu código em C que consiste em inserir elementos numa lista encadeada, mas os elementos que são inseridos devem ser posicionados na lista em ordem crescente. Por exemplo, eu insiro 10, depois insiro 20 e depois insiro 16, e a lista deve ficar assim: 10, 16, 20. Entenderam? Bem até aí tudo bem, meu código está funcionando, mas o problema é quando eu vou inserir outro elemento menor que o primeiro da lista. Aproveitando o exemplo acima, se eu for inserir o 7 nessa lista, meu código não funciona como eu esperaria. Aí é nessa parte que eu estou com problemas. Aqui a função que fiz para inserir, o parêmetro dela é a cabeça da lista na qual quero inserir os elementos: void inserir(lista **p){
lista *atual, *novo, *anterior;
int num;
novo = (lista *) malloc(sizeof(lista));
atual = *p;
anterior = NULL;
printf("Insira um valor: ");
scanf("%d", &num);
novo->valor = num;
if(atual == NULL){
novo->prox = NULL;
*p = novo;
} else{
while(atual != NULL && atual->valor < num){
anterior = atual;
atual = atual->prox;
}
novo->prox = atual;
if(anterior == NULL){
*p = novo;
} else{
anterior->prox = novo;
}
}
} Então, creio que o problema esteja nessas últimas linhas da função, deve haver alguma coisa muito muito errada acontecendo aí e eu não consigo notar. Qualquer ajuda será bem vinda, abraços.