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

时间:2012-07-06 11:15:21

标签: 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
}

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

if之后的delete head区块中,我们设置了head = tail = 0

但是在我们删除head之后,我们如何才能将其设置为某些内容?(在这种情况下为NULL

2 个答案:

答案 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;