C 双向链表插入

标签 c linked-list insert circular-list

不插入也不保留下一个和上一个节点的地址:我正在尝试从文件中读取输入;它可以正确读取所有数据,并根据每一行创建一个 Aeronava 对象。似乎插入不起作用。有什么建议吗?

void insertFAV_Av(FAVnode*list, Aeronava *av){
        FAVnode* nn = (FAVnode*)malloc(sizeof(FAVnode));
        //first = list;
        nn->infoUtil = (Aeronava*)malloc(sizeof(Aeronava));
        nn->infoUtil->idAeronava = (char*)malloc(strlen(av->idAeronava) + 1);
        //strcpy(nn->infoUtil->idAeronava, av->idAeronava);
        nn->infoUtil = av;
        if (first == NULL){
            nn->prev = nn->next = nn;
            first = nn;
        }
        else{
            list = first;
            while (list->next != first){
                list = list->next;
            }
            nn->prev = list;
            list->next = nn;
            nn->next = first;

        }
}


struct Aeronava{
    char* idAeronava;
    tipA tipAero;
    short int nrLocuri;
    double greutateMaxima;
};

struct FAVnode{
    FAVnode*next;
    FAVnode*prev;
    Aeronava* infoUtil;
};

最佳答案

        nn->prev = list;   // 1
        list->next = nn;   // 2
        nn->next = first;  // 3

第 1 行和第 2 行将 nn 双向链接到 list,但第 3 行将 nn 链接到 first只在一个方向。您在这里缺少相反的链接更新:

        first->prev = nn;

关于C 双向链表插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30259600/

相关文章:

c - 如何检查 char** 中的特定单词(char*),如 "add"并使用 if 语句进行加法

c - C 中 malloc() 的一些有用示例是什么?

c - 上一个关于链表和堆栈如何工作的问题

sql - 编写 SQL 插入函数

mysql - 将 MySQL 结果转换为 int (C++)

c - 用变量写字符

c++ - 使用 nullptr 终止迭代器

c - 双链表中交换节点时出现问题

mySQL插入和选择及位置问题

xml - 将超过 4000 个字符的 XML 插入到 Oracle XMLTYPE 列中