添加到C中的链表中



我在添加到动态链表时遇到了一些问题。基本上,我的第一个节点似乎被覆盖了。这是代码:

struct palNode {
    int number;
    int pointer_index;
    char* solving_array;
    int solved;
    struct palNode* next;
}

这是我的添加方法:

struct palNode* add_palNode_from_keyboard(struct palNode* head, int num, int pos){
    struct palNode* newnode = (struct palNode*) malloc(1 * sizeof(struct palNode));
    struct palNode* current_node = head;
    if (current_node == NULL)
    {
        head = newnode;
    }
    else 
    {
        while ((*current_node).next != NULL)
        {
            current_node = (*current_node).next;
        }
        (*current_node).next = newnode;
    }
    (*newnode).number = num;
    (*newnode).pointer_index = pos;
    (*newnode).next = NULL;
    printf("Operation completedn");
    return newnode;
}

我的问题是:我做错了什么?有更正确的方法吗?我看到了其他类似的问题,但我仍然没有得到它们

如果列表最初为空,则将head设置为新节点,但指针head是按值传递的,因此对它的更改不会出现在调用函数中。

您需要传入头指针的地址并进行修改,以便在函数之外出现更改:

struct palNode* add_palNode_from_keyboard(struct palNode** head, int num, int pos){
    // no cast needed here, and no need to multiply by 1
    struct palNode* newnode = malloc(sizeof(struct palNode));
    struct palNode* current_node = *head;
    if (current_node == NULL)
    {
        *head = newnode;
    }
    ...

相关内容

  • 没有找到相关文章