这是从单向链表的尾部删除一个元素的部分代码:
int SLList::deleteFromTail()
{
int el = tail->info;
//if the list has only one element
if(head == tail) {
delete head;
head = tail = 0;
}
else {
//some code here...
}
return el
}
这里的head
和tail
分别是指向LL的第一个和最后一个元素的指针。
在 delete head
之后的 if
block 中,我们设置 head = tail = 0
。
但是在我们删除了 head
之后,我们如何设置它的值呢?(在本例中为 NULL
)
最佳答案
Head 是一个指针
。您正在删除 pointer
指向的 object
,而不是 pointer
本身
考虑这个例子:
Foo *foo = new Foo(); //foo does not store Foo object. Just an adress of created object.
//do some stuff
delete foo; //object is deleted
foo = new Foo(); //create another Foo and make foo point to it
编辑
指针只是对象的地址。当您编写 delete head
时,您删除了 head 指向的对象,但即使在删除之后 head pointer
仍将指向与之前相同的位置。但是取消引用它(例如 *head
)会导致问题。
关于c++ - 使用 `delete` 从链表中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11361147/