1

最初の 2 つの頂点の最短パスを見つけることは問題なく機能します。リンク リストとプライオリティ キューをクリアしようとすると、問題が発生します。

class llNode {
public:
    int id;
    int source;
    int weight;
    llNode* next;
    llNode(int key, int distance, int from) {
        id=key;
        weight=distance;
        source=from;
        next = NULL;
    }
};


class lList {
private:
    llNode* root;
    llNode* end;

    void clearAll(llNode* toClear);


public:
    lList() {
        root = NULL;
    }

    void add(llNode* toAdd) {
        if ( root == NULL) {
            root = toAdd;
            end = toAdd;
            return;
        }

        end->next = toAdd;
        end=end->next;
    }

    bool isFound(int key) {
        for(llNode* ii= root; ii != NULL ; ii=ii->next) {
            if ( ii->id == key) {
                return true;
            }
        }

        return false;
    }

    void clearAll();

};

void lList::clearAll() {
clearAll(root);
}

void lList::clearAll(llNode* toClear) {
if(toClear == NULL) {
    return;
}

clearAll(toClear->next);

toClear=NULL;

}

これらの明確な方法に加えて、単純にルートを NULL に設定しようとしました。また、リストをトラバースして、各要素で削除を使用しようとしました。私はこれらの方法のいずれかで運がなければなりません。ルートが無効な場所に設定され続け、アクセス違反エラーが発生します。

私が見ていない単純なものはありますか?リンクされたリストからすべての要素を削除するにはどうすればよいですか?

4

2 に答える 2

5

各要素を調べて削除する必要があります 擬似コード

Set pointer to root
While(pointer !=null)
{
  temp=pointer->next;
  delete[] pointer;
  pointer = temp;
}
于 2012-04-06T21:24:21.923 に答える
-3

に設定rootするNULLと、リスト全体が削除されます。

void lList::clearAll() {
     root = NULL;
}

あなたはこれを試したと言った。このシナリオでは、アクセス違反はどのように発生していますか?

注意: 私のコードにはメモリ リークが含まれている可能性があります。他のメカニズムを使用してメモリが回復されない限り、おそらくリストを調べて各アイテムの割り当てを解除したいと思うでしょう。

于 2012-04-06T21:29:33.900 に答える