当我想将项目添加到链接列表时,我的程序崩溃了。 这是我正在使用的结构
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;
}
答案 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
)并正确缩进代码。它大大提高了可读性。