2012-04-06 5 views
1

私は最短経路アルゴリズムdijkstrasアルゴリズムを書こうとしていました。最初の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にルートを設定し、また、私は、リストを横断し、各要素に対してdeleteを使用してみました。私はこれらの方法のどれかで運が必要です。ルートは無効な場所に設定され続け、アクセス違反エラーが発生します。

私が見ていない単純なことがありますか?リンクされたリストからすべての要素を削除するにはどうすればいいですか? NULLrootを設定するあなたは、各要素の上に移動して、削除する必要が

+0

あなたはポインタを扱っているので、 'root.next'と' end.next'を両方とも 'root'を指すようにすることができます。 –

答えて

5

それは 疑似コード

Set pointer to root 
While(pointer !=null) 
{ 
    temp=pointer->next; 
    delete[] pointer; 
    pointer = temp; 
} 
+0

typo? 'pointer = temp-> next'を意味しましたか? –

+0

@HunterMcMillen yupありがとう – Pepe

+1

tempにポインタを割り当ててから、そのポインタを削除することに注意してください。 –

-2

は、リスト全体を削除します。

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

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

注意:私のコードにはおそらくメモリリークが含まれています!他のメカニズムを使用してメモリを回復していない場合は、リストを参照して各アイテムの割り当てを解除することをお勧めします。

+0

rootにNULLを設定すると、リストが削除されます。 – Pepe

+0

リストを空にします。 'isFound'のように、すべての入力に対して' false'を返します。 –

+6

これは絶対に間違った答えです。あなたは、「削除」という言葉はもちろんのこと、あなたのリストのルートへの参照を失うだけで、ポインタやメモリリーク、そしてあらゆる種類の厄介なものを残してしまいました。より正確にあなたのリストを失った – devshorts

関連する問題