使用`delete`从链表中删除节点

Jat*_*tin 0 c++ pointers linked-list delete-operator

以下是从单个链接列表尾部删除元素的代码的一部分:

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
}
Run Code Online (Sandbox Code Playgroud)

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

在我们设置if之后的上面的块delete headhead = tail = 0.

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

And*_*rew 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
Run Code Online (Sandbox Code Playgroud)

编辑 指针只是一个对象的地址.写入delete head时删除头部指向的对象,但即使删除后head pointer也会指向与之前相同的位置.但是取消引用它(例如*head)会导致问题.