使用“删除”从链表中删除节点



这是从单链表尾部删除元素的代码的一部分:

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
}

这里headtail分别指向LL的第一个和最后一个元素。

在上面的if块中,delete head我们将设置head = tail = 0

但是在我们删除了head之后,我们如何才能将它的值设置为某些东西?(在这种情况下NULL

head是一个pointer。您正在删除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 pointer也会指向与以前相同的位置。但是取消引用它(例如 *head )会导致问题。

删除 head

后,创建新对象并将对象的地址分配给head

head = addressOfNewObject;

相关内容

  • 没有找到相关文章

最新更新