无法删除我的链表的头节点

can't delete the head node of my linked list

我正在尝试为迷你 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);