从链表中删除值/删除未动态分配的值



我的教科书有以下代码,用于从链表中删除元素。

void remove(double num)
{
Node *cur, *prev;
if(!head){
return;
}
if(head->data == num)
{
cur = head;
head = head->next;
delete cur;
}
else{
cur = head;
while(cur!=NULL && cur->data != num)
{
prev = cur;
cur= cur->next;
}
if(cur)
{
prev->next = cur->next;
delete cur;
}
}
}

我对此代码有几个问题。首先,如何删除未动态分配的值?为什么有必要这样做?我在任何地方都没有看到新声明。其次,为什么这个代码块是必要的?为什么它需要在 if 语句中?

if(cur)
{
prev->next = cur->next;
delete cur;
}

首先,此代码假定节点是动态分配的。这就是链表通常的构造方式。如果您的代码使用堆栈上的节点,则只需删除delete语句即可。(并稍微考虑一下您将如何跟踪正在使用的节点。

其次,该代码块是必要的,因为它删除了要删除的节点(如果该节点存在(。它位于if块中,以防节点不存在。在纸上绘制一个简单的示例,并逐步浏览代码,看看如果您尝试删除不在列表中的元素会发生什么情况。

delete以前未分配new的值是不正确的。我认为你的教科书暗示了new分配。

关于你的第二个问题,之后

while(cur!=NULL && cur->data != num){...} 

已经完成,要么cur == NULL要么cur != NULL && cur->data == num.if (cur)实际上是if (cur != NULL)的,这意味着cur包含您正在寻找的价值。

需要块本身来删除找到的元素,方法是将前一个元素的next指针更改为该元素,该指针位于要删除的元素之后。

相关内容

  • 没有找到相关文章

最新更新