c:使用函数将新节点插入到单链表中

标签 c linked-list singly-linked-list

我使用一个函数将新节点插入到我的单链表中,但是当我在插入后打印出节点内的所有值时,我只得到第一个节点的值:

// Make list
createList(head, 17);

// Insert to list
for (int x = 9; x > 0; x /= 3)
{
    if (!insertToList(head, x))
    {
        fprintf(stderr, "%s", error);
        return 1;
    }
}

功能:

bool insertToList(NODE *head, int value)
{
    NODE *node = malloc(sizeof(NODE));
    if (node == NULL)
        return false;

    node -> number = value;
    node -> next = head;
    head = node;
    return true;
}

--输出:17

当我不使用函数时,一切都会按预期工作:

// Make list
createList(head, 17);

// Insert to list
for (int x = 9; x > 0; x /= 3)
{
    NODE *node = malloc(sizeof(NODE));
    if (node == NULL)
    {
        fprintf(stderr, "%s", error);
        return 1;
    }

    node -> number = x;
    node -> next = head;
    head = node;
}

--输出:1 3 9 17

为什么?

最佳答案

您在函数中传递指针,更新它而不将其返回,在这种情况下,外部函数永远无法知道头部是否已更改。您还必须在 for 循环中适当更新头部。

在不使用该函数的情况下,每次插入时,for循环都会知道正确的head地址。

如果您返回头指针并正确更新它,它可能会解决您的问题。

关于c:使用函数将新节点插入到单链表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994029/

相关文章:

c - C 编程语言 FOR 循环的问题

c++ - Splice_after执行forward_list

java - 在链表上实现迭代器

c - 尝试使用timer_A来控制LED

objective-c - *变量名和变量名有什么区别

c - C 中的不可变结构值

C++链表——析构函数实现

c - 为什么链接到 FastCGI 库会导致段错误?

c++ - 创建不带 PIPE_REJECT_REMOTE_CLIENTS 的NamedPipe

C malloc valgrind - 在我的单链表实现中未初始化的内存