一种使用C删除链表中元素的方法

时间:2015-07-29 19:35:35

标签: c linked-list

所以我被要求制作一个清空整个链表的方法。

这就是我现在所拥有的,我不知道为什么它不想工作:

void deleteList(){



    }

2 个答案:

答案 0 :(得分:0)

您的功能需要通过列表的头部,即它可以操作的struct node *head。然后,您可以使用它来代替current来跟踪当前的头部。

void deleteList(struct node *head){

    struct node* next;

    while (head!= NULL) {
        next = head->next;
        free(head);
        head = next;
    }
}

编辑:

由于列表头是全局变量,所以你会这样做:

struct node *head;   // Initialized elsewhere

void deleteList(){

    struct node* current = head;
    struct node* next;

    while (current != NULL) {
        next = current->next;
        free(current);
        current = next;
    }
}

答案 1 :(得分:0)

您的函数永远不会为任何节点分配“当前”。因此,你的while循环永远不会运行,因为“current”实际上总是等于NULL(希望,实际上它是未定义的并且可能导致非常奇怪的行为)。始终跳过循环。尝试将列表的第一个节点作为参数传递给您的函数:

void deleteList(struct node * start) {

    //"start" points to the first node in the list, point "current" at it
    struct node * current = start;
    struct node * next;

    while (current != NULL) {
       next = current->next;
       //what's this pop doing?  It seems unnecessary to the logic here
       pop(next);
       //free "current" and then point "current" at "next"
       free(current); 
       current = next;
    }
}

这也允许您通过提供“开始”要开始释放的节点来释放列表末尾的任意段。它不一定是第一个节点。