0

我想删除链表中值为 N 的节点。下面是我写的链表和删除函数的定义。

typedef struct LinkedList {
    int val;
    struct LinkedList *next;
} LinkedList;

void removeNode(int val, LinkedList **head) {
   LinkedList *prev = *head;

   while (prev && prev->val == val)
       prev = prev->next;
   head = &prev;
   if (*head == NULL)
       return;

   // other stuff
}

为了测试指向指针的指针在这个函数中是否有效,我编写了以下函数。

int main() {
    LinkedList root;
    root.val = 1;
    root.next = NULL;
    LinkedList *head = &root;

    removeNode(1, &head);

    if (head == NULL)
        printf("%s\d", "Empty");
    else
        printf("%d\n", head->val);

    return 0;
}

我认为输出将是“空的”,因为removeNode函数会将head指针修改为NULL. 但是,输出为1

head我的问题是为什么指向指针的指针在removeNode功能上没有改变。欢迎所有建议。

更新:

感谢迈克尔的回复。正确的修改方式head*head = prev,不是 head = &prev

4

1 回答 1

2
   head = &prev;

你修改head,没有*head。我怀疑你想给prev它分配地址。其余的还没有检查。

于 2013-10-20T19:34:39.100 回答