链表实现中的错误 下面是代码从Adam Drozdek的C++(第二版)中的数据结构和算法实现的一个摘录,包括删除具有给定值的节点。 IntNode *tmp = head->next; head = head->next; delete tmp;

链表实现中的错误 下面是代码从Adam Drozdek的C++(第二版)中的数据结构和算法实现的一个摘录,包括删除具有给定值的节点。 IntNode *tmp = head->next; head = head->next; delete tmp;,c++,linked-list,C++,Linked List,(head在别处定义为IntNode*)此代码片段中是否存在打字错误,或者我的精神处理器是否不正确,因为每次执行上述代码片段后,head始终是空指针?否,它将指向列表中的第二个元素(现在是第一个)。否,它将指向列表的第二个元素(现在是第一个)。当您编写delete tmp时,您正在删除tmp指向的对象。但是,删除后,head仍将指向相同的位置。取消对它的引用(*head)将导致问题,因为head指向的对象已被删除。当您写入删除tmp时,您正在删除tmp指向的对象。但是,删除后,head仍将指向相

(head在别处定义为IntNode*)此代码片段中是否存在打字错误,或者我的精神处理器是否不正确,因为每次执行上述代码片段后,head始终是空指针?

否,它将指向列表中的第二个元素(现在是第一个)。

否,它将指向列表的第二个元素(现在是第一个)。

当您编写
delete tmp
时,您正在删除
tmp
指向的对象。但是,删除
后,head
仍将指向相同的位置。取消对它的引用(
*head
)将导致问题,因为
head
指向的对象已被删除。

当您写入
删除tmp
时,您正在删除
tmp
指向的对象。但是,删除
后,head
仍将指向相同的位置。取消对它的引用(
*head
)将导致问题,因为
head
指向的对象已被删除。

在上述代码中没有任何设置为
NULL
删除tmp!=(tmp=nullptr)
我想确保我正确解释了代码。考虑一个具有两个节点的链表- 1(头)和2。第一行代码的tmp点是head->next,即节点2。第二行的head point to head->next也是节点2。第三行释放tmp——节点2指向的空间。那么,将来调用*head不会因为tmp指向的空间被释放而导致程序崩溃吗?如果不崩溃,它肯定会引起bug,不是吗?@JellalF:完全正确。谢谢你验证我的思维过程!我觉得我遗漏了一些东西,因为我认为教科书中的代码是没有bug的。在上面的代码中没有任何东西被设置为
NULL
delete tmp!=(tmp=nullptr)
我想确保我正确解释了代码。考虑一个具有两个节点的链表- 1(头)和2。第一行代码的tmp点是head->next,即节点2。第二行的head point to head->next也是节点2。第三行释放tmp——节点2指向的空间。那么,将来调用*head不会因为tmp指向的空间被释放而导致程序崩溃吗?如果不崩溃,它肯定会引起bug,不是吗?@JellalF:完全正确。谢谢你验证我的思维过程!我觉得我遗漏了一些东西,因为我假设教科书中的代码是没有bug的。当然,如果head是列表中唯一的元素,那么head->next最初将为NULL,之后head将为NULL。但是该元素现在将被删除。当然,如果head是列表中唯一的元素,那么head->next最初将为NULL,之后head将为NULL。但是该元素现在将被删除。谢谢。这就是我想问的,但是我假设delete也会将相应的指针设置为NULL。谢谢。这就是我想问的,但我假设delete也会将相应的指针设置为NULL。