c-从链接列表中添加和删除节点的问题



我有一个程序,它必须接受文本文件的输入,用这个输入创建一个链表,然后才能添加、删除、修改和查询链表。

我的查询和修改功能运行良好。我的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;

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

相关内容

  • 没有找到相关文章

最新更新