繁体   English   中英

使用指向C中指针的指针删除链表中的节点

[英]remove a node in linked list using pointer to pointer in C

我想删除链接列表中值为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

我的问题是为什么指向指针的指针不会在removeNode函数中改变head 欢迎所有建议。

更新:

感谢Michael的回复。 修改head的正确方法是*head = prev ,而不是head = &prev

   head = &prev;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM