发出添加和删除链接列表中的节点的问题

我有一个程序,必须从文本文件中获取输入,使用此输入创建链接列表,然后能够添加,删除,修改和查询链接列表。

我的查询和修改function工作正常。 我的删除function在特定情况下失败,我正在努力使用添加function。 没有来自编译器的错误帮助。 如果有人能指出我正确的方向,将不胜感激。

添加function给了我最大的问题。 经过几个小时的调试和同事的帮助,我最接近添加的东西正在改变

更新:感谢大家的反馈! 我最终在一位同事的帮助下发现了我遇到的主要问题。 显然我传递的是一个值而不是一个引用。 **为添加和删除function做了诀窍。

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; 

使用双指针迭代器来插入和删除。