0

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

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 headhead = tail = 0

但是在我们删除之后head,我们如何设置它的值呢?NULL在这种情况下)

4

2 回答 2

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 指向的对象,但即使在删除之后head pointer也会指向和以前一样的地方。但是取消引用它(例如*head)会导致问题。

于 2012-07-06T11:16:08.427 回答
1

删除头部后,创建新对象并将对象的地址分配给头部

head = addressOfNewObject;
于 2012-07-06T11:22:49.503 回答