我创建了一个单链列表,其中包含3个节点,其值分别为45,90,100。我正在编写一个函数,该函数将删除列表的最后一个节点。但是输出显示所有3个值。
void DeleteNode()
{
struct node *ptr1=head,*ptr2=head;
while(ptr1!=NULL&&ptr2->link!=NULL)
我创建了两个struct节点类型的指针ptr1和ptr2进行遍历。循环被定义为运行,直到ptr1到达最后一个节点并指向NULL,并且ptr2-> link即最后一个节点指向NULL。
{
ptr1=ptr1->link;
ptr2=ptr2->link;
}
ptr2=NULL;
当循环中断时,ptr2将指向NULL,因此应删除最后一个节点。但这不会发生。
}
“ ptr2将指向NULL,因此应该删除最后一个节点。”
不。
您使指针无效,该指针是局部变量(在使它无效之前碰巧指向链接列表中的某物),而不是链接列表结构的链接指针部分:它对链接列表没有影响。
请注意,更正此错误后,您将发生内存泄漏(已删除的节点)。
另外,ptr1和ptr2始终指向同一事物,同时保留两者都没有意义。您最初可能有使用ptr2 == ptr1-> link或其他方法的想法,但这不是必需的,并且您的测试ptr1 != NULL && ptr2->link != NULL
实际上等效于ptr1 != NULL && ptr1->link != NULL
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句