c - 最简单的链表创建和打印数据

标签 c pointers memory-management data-structures linked-list

下面是一个简单的 C 代码段,用于创建一个链接列表并打印列表中包含的所有元素。

要求用户输入整数数据,直到输入零,标志着用户输入结束;一旦数据保存到链表中,程序就会打印链表中存储的所有元素,然后完成执行。

我无法让它运行,每次出现“段错误”错误时,请检查并告诉我哪里错了(使用gcc 4.8.2)

代码:

struct node
{
    int data;
    struct node * next;
};

struct node * createLinkedList() 
{
    int x;
    struct node * start;
    start = NULL;
    printf("Input 0 to end, Insert elements :\n");

for(scanf("%d", &x); x ;scanf("%d", &x))
{
    struct node * temp = (struct node *) malloc(sizeof(struct node));
    if (temp)
    {
        temp->data = x;
        temp->next = NULL;

        if(start == NULL) {
            start = temp;
        } else {
            start->next = temp;
            start = temp;
        }
    }
}   

return start;
}

void printLinkedList(struct node * start)
{
    if (start == NULL) {
        printf("Linked List is empty!\n");
    } else {
        printf("\nPrinting Linked List : \n");
        struct node * s;
        s = start;
        while(s != NULL) 
        {
            printf("%d\n", s->data);
            s = s->next;
        }
    }
}

int main(int argc, char const *argv[])
{
    struct node * start;
    start = NULL;
    start = createLinkedList();
    printLinkedList(start);
    return 0;
}

最佳答案

这部分代码

    if(start == NULL) {
        start = temp;
    } else {
        start->next = temp;
        start = temp;
    }

无效。一定有

    if(start == NULL) {
        start = temp;
    } else {
        temp->next = start;
        start = temp;
    }

您还需要一个删除列表中所有节点的函数。

关于c - 最简单的链表创建和打印数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001981/

相关文章:

C++ 从空指针调用非虚非静态方法,不访问成员 : is this guaranteed to work?

objective-c - [ self 自动释放] 可以接受吗?

c# - 为什么 C# 中的空结构会消耗内存

代码似乎是正确的,但程序在打印数组的第一行后挂起

c - 指向静态定义的二维数组的指针

C++ 动态分配不匹配 : Is this problematic?

C if 语句将两个整数变量与同一个常量进行比较

c - pthread C 中的线程队列 - Web 服务器响应流水线

c - 如何将月份(int)转换为月份名称(字符串)

c - 基数转换c