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

时间:2014-09-24 19:21:41

标签: c linked-list nodes

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

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

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

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

void add(employee **head, int addEMP_ID, char* addName, int addDept, int addRank, double addSalary) {
}

void delete(employee **head, int option) {
}

2 个答案:

答案 0 :(得分:0)

如果头节点是您要删除的节点,则在调用函数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;
}

答案 1 :(得分:0)

需要考虑两件事。

启动伪OOP,将指针传递给struct List而不是struct Node

typedef struct structList {
    employeeData *head; 
}  EmployeeList;

使用double-pointer iterator插入和删除。