以下是从单个链接列表尾部删除元素的代码的一部分:
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的第一个和最后一个元素。
在if
之后的delete head
区块中,我们设置了head = tail = 0
。
但是在我们删除head
之后,我们如何才能将其设置为某些内容?(在这种情况下为NULL
)
答案 0 :(得分:6)
头是pointer
。您要删除object
所指向的pointer
,而不是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 pointer
将指向与之前相同的位置。但取消引用它(例如*head
)会导致问题。
答案 1 :(得分:1)
删除头部后,创建新对象并将对象的地址指定为
head = addressOfNewObject;