これをメイン関数で使用しましたが、機能していません
void LinkedList::TraPrinHead(const LinkedList& p)
{
Nodes* currentNodes = header->next;
while( currentNodes != tail ) {
cout << currentNodes->elem << " ----> ";
currentNodes = currentNodes->next; }
}
これからリスト全体を出力することを期待しています...しかし、無限ループが発生し続けます。
cout << currentNodes->elem << " ----> ";
currentNodes = currentNodes->next;
cout << currentNodes->elem << " ----> ";
currentNodes = currentNodes->next;
そして、リストの最初の2つの要素を出力するためだけに単純化しても、無限ループは発生しませんが、異なる2つのノードに対して同じことを取得し続けます
たとえば、私の最初のノードは A1 で、2 番目は A2 でしたが、その関数では A1 ----> A2 を取得することを期待していますが、取得するのは A1 ----> A1 ----> です。
追加機能に問題があると思います。
これは私が使用する機能です
void LinkedList::InsertDoublyBefore(Nodes* d, const string& e) {
if (header->next == tail)
{
Nodes* n = new Nodes;
n->elem = e;
n->next = tail;
n->prev = tail->prev;
tail->prev->next = tail->prev = n;
header->next = n; // very important!!!!
}
else
{
if (d==tail)
{
Nodes* n = new Nodes;
n->elem = e;
n->next = tail;
n->prev = tail->prev;
tail->prev = n;
}
else
{
Nodes* n = new Nodes;
n->elem = e;
n->next = d;
n->prev = d->prev;
d->prev->next = d->prev = n;
}
}
}
void LinkedList::InsertDoublyAfter(Nodes* d, const string& e)
{
InsertDoublyBefore(d->next, e);
}
void LinkedList::addtoFront(const string& e) { InsertDoublyBefore(header->next, e); }
void LinkedList::addtoBack(const string& e) { InsertDoublyBefore(tail, e); }