链接列表错误 - C.

Arl*_*ind 0 c linked-list

我只是搞乱链接列表,但似乎我脑子里有很多错误.我用功能尝试了这个,但我无法使用它.我认为通过简化它可以使它变得正确,但它仍然不起作用.它通常只打印第一个元素,然后是随机的大数字(最有可能是内存地址)

我只是想创建一个列表并打印其内容.

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

struct el{
    int value;
    struct el *next;
};

typedef struct el Elem;



int main()
{
    int nr, i;
    struct el *Head, *Conductor;
    Head = malloc(sizeof(Elem));
    Conductor = Head;
    printf("How many elements do you want to add? ");
    scanf("%d", &nr);
    for(i = 0; i < nr; i++)
    {
        printf("Enter value for element %d:  ", i);
        scanf("%d", &(Conductor->value));
        Conductor = Conductor->next;
        Conductor = malloc(sizeof(Elem));


    }
    free(Conductor->next);
    Conductor->next = NULL;

    Conductor = Head;
    printf("\n");

    for(i = 0; i < nr; i++)
    {
        printf("%d ->  ", Conductor->value);
        Conductor = Conductor->next;
    }

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

sir*_*ius 6

您应该分配的内存Conductor->next分配之前Conductor->nextConductor.

for(i = 0; i < nr; i++)
{
    printf("Enter value for element %d:  ", i);
    scanf("%d", &(Conductor->value));
    Conductor->next = malloc(sizeof(Elem));
    Conductor = Conductor->next;
}
Run Code Online (Sandbox Code Playgroud)

在分配之前进行分配很重要,否则"旧" Conductor->next将不会指向新分配Conductor.


Som*_*ude 5

您没有为next指针分配内存.

您需要在分配之前进行分配:

scanf("%d", &(Conductor->value));
Conductor->next = malloc(sizeof(Elem));
Conductor = Conductor->next;
Run Code Online (Sandbox Code Playgroud)