Estou com uma dúvida sobre a correta alocação de memoria em meu codigo. Quando vejo o print dos enderecos dos proximos nós, aparece o mesmo valor. Eu quero encadear a lista para armazenar uma sequencia de inteiros, sendo o int inserido pelo usuario sendo destinado ao final da lista. Tentei seguir alguns manuais de lista encadeada, mas me perdi nessa parte. Onde estaria(m) o(s) erro(s)? Segue o codigo:
#include <stdlib.h>
#include <stdio.h>
typedef struct noh noh;
struct noh
{
int elem;
noh*prox;
};
int main ()
{
noh *p,
*inicio=NULL,
*q;
int n, i, a;
//inicio->elem=22;
//inicio->prox=p;
inicio = (noh*)malloc(sizeof(noh));
p = (noh*)malloc(sizeof(noh));
q = (noh*)malloc(sizeof(noh));
p=inicio;
q=inicio->prox;
printf("Quantos elementos serao inseridos para serem reordenados?");
scanf (" %d", &n);
for (i=0; i<n; i++)
{
if(p==NULL || q==NULL)///teste de alocacao de memoria
{
printf("Falha na alocacao de memoria!\n");
system("pause");
exit(1);
}
if(i==0)
{
printf ("Digite o primeiro elemento: ");
scanf(" %d", &inicio->elem);
printf (" inicio -> prox %d\n", inicio->prox);
q=inicio->prox;
}
else
{
p=(noh*)malloc(sizeof(noh));
q=(noh*)malloc(sizeof(noh));
printf ("\nDigite o %d-esimo numero: ", i+1);
scanf (" %d", &q->elem);
printf("q->prox %d\n", q->prox);
p=q;
q=q->prox;
}
}
q->prox=NULL;
p=inicio->prox;
while(p->prox != NULL)
{
printf("%d\n", p->elem);
p = p->prox;
}
system ("pause");
return 0;