二重リンクリストのプログラミングに問題があります。問題は、リンクがnullptrであるかどうかをチェックすると、Add関数が無限ループになることです。私がしなければ、それは私に誤りを与える。私はこれを修正しようとしてきましたが、私の人生はそれを理解できません。以下にaddメソッドを示します。二重リンクリストに関数を追加すると無限ループになります
void Add(string n, int w) //Method to add a node to the Linked List and maintain the order.
{
node * nd = new node(n, w, nullptr, nullptr);
if (nHead == nullptr && wHead == nullptr) //If there is nothing in the Linked List
{
nHead = nd; //Add a node
wHead = nd;
}
else //If there is something in the linked List
{
node * ntraverse = nHead; //variable to traverse down the name links
while (nd->name > ntraverse->name && ntraverse->wLink != nullptr)
{
ntraverse = ntraverse->nLink; // Traverses down the name links until nd's name is smaller than a links
}
nd->nLink = ntraverse; // Here, the namelink for nd is set to ntraverse, since ntraverse is less than or equal to nlink
ntraverse->nLink = nd; // So here, since nd is the new value appended to the rest of the list, we set ntraverse = nlink.
// note at this point, we have not handled weight
node * wtraverse = wHead; //variable to traverse down the weight links
while (nd->weight > wtraverse->weight && wtraverse->wLink != nullptr)
{
wtraverse = wtraverse->wLink; // Traverses down the weight links until nd's weight is smaller than a links
}
nd->wLink = wtraverse; // Here, the namelink for nd is set to ntraverse, since ntraverse is less than or equal to nlink
wtraverse->wLink = nd; // So here, since nd is the new value appended to the rest of the list, we set ntraverse = nlink.
//at this point, nd holds both the correct nlink and wlink
}
cout << "Added: " << nd->name << " " << nd->weight << "\n";
cout << "Current nlist:\n";
nPrint();
cout << "Current wlist:\n";
wPrint();
size++; //increment size
}
ご協力いただければ幸いです。私に何かに答える必要があるなら、私に知らせてください。ノードは正常に動作し、name、weight、nLink、およびwLinkの4つの値を格納します。ここで、nLinkはリストを名前順に保ち、wLinkはリストをウェイト順に保ちます。 LinkedListの場合、nHeadは名前の頭で、wHeadは重みの頭です。
もう一度、ご協力いただきありがとうございます。
これは "C"または "C++"と仮定していますか?適切なタグを追加してください。もしそうなら、 'nullptr'とは何か –
C++、なぜnullptrを追加したのかは、nullptrのリンクをチェックするときに何かが間違っているかもしれないと思ったことです。 – Paul