[英]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.