C - 无法删除链表的头节点



我正试图为迷你SQL语言创建一种简单的编译器,当我执行算法时,有一个步骤需要调用一个函数来删除链表的头节点(包含该语言的词汇单元(,并将头分配给第二个节点。在函数内部,代码似乎工作得很好(当我打印列表时,头现在是第二个节点(。但变化影响原始列表很奇怪,因为第一个头仍然在那里,但有一个不同的值,比如12321104(=p(。那么问题在哪里呢这是我的链接列表的结构:

typedef struct U_Lexicale {
    char* Nom_UL; 
    int Type_UL; 
    int Ligne_UL;
    struct U_Lexicale* suivant;
} ElementUL;
void suppression(ElementUL* liste) {
    if (liste == NULL) {
        exit(EXIT_FAILURE);
    }
    if (liste != NULL) {
        ElementUL* tmp = liste;
        liste = liste->suivant;
        free(tmp);
        afficherListeUL(liste);
    }
}
suppression(copieAnalyseLex);

您修改了liste,但没有修改copieAnalyseLex来反映该更改。

#include <assert.h>
void suppression(ElementUL** liste_p)
{
    assert( *liste_p != NULL );
    ElementUL* tmp = *liste_p;
    *liste_p = (*liste_p)->suivant;
    free(tmp);
}
suppression(&copieAnalyseLex);
afficherListeUL(copieAnalyseLex);

相关内容

  • 没有找到相关文章

最新更新