我有一个程序,它必须接受文本文件的输入,用这个输入创建一个链表,然后才能添加、删除、修改和查询链表。
我的查询和修改功能运行良好。我的delete函数在特定情况下会失败,而我正在为add函数而挣扎。编译器没有错误可以帮助解决。如果有人能为我指明正确的方向,我将不胜感激。
add函数给了我最大的问题。经过几个小时的调试和同事的帮助,我最接近添加任何内容的就是更改
更新:感谢大家的反馈!在一位同事的帮助下,我发现了自己遇到的主要问题。显然,我传递的是一个值,而不是引用。**对add和delete函数都做到了。
void add(employee **head, int addEMP_ID, char* addName, int addDept, int addRank, double addSalary) {
}
void delete(employee **head, int option) {
}
如果头节点是您想要删除的节点,那么在调用delete函数后,它将被释放。但是,头指针仍然指向已经释放的头节点。这就是导致seg故障的原因。
一种改变的方法是:
void delete(employee **head, int option) {
employee* current;
employee *del;
current = *head;
if (current != NULL) {
if (current->EMP_ID == option) {
del = *head;
*head = *head->next;
free(del);
return;
}
while (current->next != NULL) {
if (current ->next->EMP_ID == option) {
del = current -> next;
current->next = current ->next->next;
free(del);
return;
}
current = current -> next;
}
}
return;
}
需要考虑两件事。
开始一个伪OOP,传递一个指向struct List
而不是struct Node
的指针。
typedef struct structList {
employeeData *head;
} EmployeeList;
使用双指针迭代器插入和删除。