我在我的主要功能中使用了它,但它不起作用
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;
即使我简化它只是为了打印出列表中的前两个元素,我也不会得到无限循环,而是会为不同的两个节点得到相同的结果
例如,我的第一个节点是 A1,第二个是 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); }