添加到C中的链表

时间:2015-12-20 14:12:35

标签: c linked-list

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

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 completed\n");

    return newnode;
}

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

1 个答案:

答案 0 :(得分:1)

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

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

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;
    }
    ...