指向错误的列表成员

pointing wrong list member

这可能是个笨问题,但你能解释一下为什么 运行 我打印的是列表的最后一个成员而不是第一个吗?我错过了什么吗?

struct nodo {
int info;
struct nodo *prec;
struct nodo *succ;
} ;
typedef struct nodo nodo;



    nodo *leggi_lista(void);

 int main (void) {

struct nodo *q;

q= NULL;
q=leggi_lista();

printf("%d\n\n", q->info);   //should print first member of the list

return 0;

}

nodo *leggi_lista(void) {       //creating list 
    nodo *p, *primo=NULL;
    int i, n;
    printf("Numero di elementi: ");
    scanf("%d", &n);
    printf("Inserisci %d numeri: ", n);
    for (i=0; i<n; i++) {
            p = malloc(sizeof(struct nodo));
            scanf("%d", &p->info);
            p->succ = primo;
            primo = p;
            }


    return (primo) ;}

aa 我不知道我还能添加什么 post 帮手欺负我:(

您正在 returning primo 来自保存 p 值的函数,这是由最后一个 malloc() 得到的,显然您看到了最后一个值正在打印出来。

您需要修复创建列表的功能。您需要保持列表的头部完好无损,并且 return 函数中的 head 并从 head 打印到列表末尾。