void createnode(int data)
{
node *temp=new node;
temp->data=data;
if(head==null)
{
head=temp;
tail=temp;
temp=null;
}
else
{
tail->next=temp;
temp=null;
}
}
我现在应该删除临时吗? 我将使用另一个函数来删除每个节点。这就够了吗?
我现在应该删除临时吗?我将使用另一个函数来 删除每个节点。
不。
正如您的函数名称所暗示的那样,它是createNode()
(读作创建节点(。
此函数的重点是通过创建和链接节点来构建列表;
不要删除它们。
仅当列表被销毁或您希望从列表中移除(或删除(节点时才删除。
注:
将temp
重命名为"newNode">,不要将其设置为null
,以免有悬空的指针。
首先,temp
是空的,所以删除它将是一个无操作。
如果您询问是否应该删除此函数中new node
的结果,答案是"不,您不应该"。如果这样做,列表将保留悬空指针。正确的方法是在节点从列表中删除时删除节点,删除列表本身等。
你需要阅读一些关于指针和内存的基本知识。
delete
用于从内存中删除某些内容。在这种情况下,这是存储节点中内容的堆变量。显然,这将在删除节点时准确完成。
将temp
设置为nullptr
后,它不再表示(/指向(任何内存。对它调用删除是没有意义的。(这在技术上是无害的,但代码中有无用的行仍然不好。
我建议您了解堆栈和堆是什么,以及为什么堆需要新建和删除,而堆栈不需要。这可能会为您澄清问题。