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 headを設定していますhead = tail = 0

しかし、 を削除した後head、その値を何かに設定するにはどうすればよいでしょうか? (NULLこの場合)

4

2 に答える 2

6

ヘッドはpointer. 自体ではなく、 がobject指すを削除していますpointerpointer

次の例を検討してください。

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 に答える