我真的无法理解我的代码有什么问题。
当我添加第一个元素时,一切都很好但在那之后,它不起作用。当ptr为NULL时,它进入while循环。 检查是否存在问题?
struct Car
{
int startTime;
char *model;
char *code;
char *location;
struct Car *next;
int deptEnterTime;
bool waitingForFraming;
bool waitingForPainting;
bool waitingForPolishing;
bool waitingForEngine;
bool waitingForElectronic;
bool waitingForIndoor;
bool waitingForTest;
};
struct Car *head = NULL;
void insert(int startTime, char *model, char *code)
{
/*create a link*/
struct Car *link = (struct Car*) malloc(sizeof(struct Car));
link->startTime= startTime;
link->model = model;
link->code = code;
link->waitingForFraming=true;
link->waitingForPainting=false;
link->waitingForPolishing=false;
link->waitingForEngine=false;
link->waitingForElectronic=false;
link->waitingForIndoor=false;
link->waitingForTest=false;
if(head == NULL)
{
head = link;
}
else
{
struct Car *ptr;
ptr = head->next;
while(ptr != NULL)
{
ptr = ptr->next;
}
ptr = link;
}
}
答案 0 :(得分:0)
你应该将它分配给最后一个可用的结构,而不是下一个,这是你如何做到的:
struct Car *ptr = head;
while(ptr->next != NULL)
{
ptr = ptr->next;
}
ptr->next = link;
我建议在NULL旁边设置link->以避免随机数据:
....
link->waitingForTest=false;
link->next=NULL;
if(head == NULL)
.....
答案 1 :(得分:0)
对于初学者,您必须为添加的元素将数据成员next
设置为NULL。
struct Car *link = (struct Car*) malloc(sizeof(struct Car));
link->next = NULL;
//...
这部分功能也错了
else
{
struct Car *ptr;
ptr = head->next;
while(ptr != NULL)
{
ptr = ptr->next;
}
ptr = link;
}
应该写成
else
{
struct Car *ptr = head;
while( ptr->next != NULL)
{
ptr = ptr->next;
}
ptr->next = link;
}
考虑到如果要将元素添加到列表末尾,则应至少声明一个双面列表。否则,在列表末尾添加元素效率很低。