【发布时间】:2013-04-14 00:58:39
【问题描述】:
我在我的主要功能中使用了它,但它不起作用
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); }
【问题讨论】:
-
我有 2 个查询。调用函数时,
d指向什么?它是列表的第一个元素还是最后一个?另一个问题,header和tail在哪里被初始化?在您的代码中,我没有观察到tail正在更新。这是预期吗?
标签: c++ pointers data-structures linked-list graph-theory