在链表C中添加项目

时间:2016-06-02 19:11:26

标签: c list input linked-list

当我想将项目添加到链接列表时,我的程序崩溃了。 这是我正在使用的结构

typedef struct seats
    {
    int number, reserved;
    char name[1000]; 
    } seats;
    // node list
    typedef struct node
    {
    seats seat;
    struct node * next;
    } node_t;

这是我的insert函数

void AddSeat(node_t * head, seats a_seat) // unos podataka na kraj liste
    {
    node_t * current = head;
    while (current->next != NULL) {
        current = current->next;
    }

    /* now we can add a new variable */
    current->next = malloc(sizeof(node_t));
    current->next->seat = a_seat;
    current->next->next = NULL;
    }

1 个答案:

答案 0 :(得分:0)

其实我认为你的逻辑错了。

在链接列表中,您以空节点开头:

[ ]->

如果您要存储某些内容,请填写节点。

[X]->

然后您在其末尾创建一个新的空节点。

[X]->[ ]

等等..等等..

[X]->[X]->

[X]->[X]->[ ]

在您的代码中,您将值添加到新元素。如果您位于列表的结束将座位分配给当前节点,然后最后创建一个新的(空)节点 。您还应该为节点创建一个变量,为它分配内存,然后将节点指向它。

要使链接列表正常工作,

/* now we can add a new variable */
current->next = malloc(sizeof(node_t));
current->next->seat = a_seat;
current->next->next = NULL;
你应该

void AddSeat(node_t *head, seats a_seat){
    node_t *current = head;
    node_t *new_node;

    ...

    new_node = malloc(sizeof(node_t));
    current->seat = a_seat;
    current->next = new_node;

    ...

}

在使用C语言编写代码时,请考虑遵循一些好的做法,例如将指针运算符(*)转换为变量名称(char *var而不是char * var)并正确缩进代码。它大大提高了可读性。