gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:35 28 4
gpt4 key购买 nike

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

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。欢迎提出所有建议。

更新:

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

最佳答案

   head = &prev;

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

关于c - 使用 C 中指向指针的指针删除链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19481855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com