我正在尝试为双向链表创建一些节点并将它们打印出来。所以我创建了我的 dnode 类:
template <typename T>
class dnode
{
public:
T nodeValue;
dnode<T> *prev;
dnode<T> *next;
dnode() : prev(this), next(this) {}
dnode(const T& item, dnode<T> *prevNode = NULL, dnode<T> *nextNode = NULL) :
nodeValue(item), prev(prevNode), next(nextNode) {}
};
然后我有我的 writeList 函数:
template <typename T>
void writeDLinkedList(dnode<T>* header, const string& seperator = " ")
{
dnode<T> *p = header->next;
while (p != header)
{
cout << p->nodeValue << seperator;
p = p->next;
}
cout << endl << endl;
}
在 main 中,我创建了一个头指针和两个节点,使用构造函数来分配循环列表中的前一个和下一个节点:
dnode<int> *header, *one, *two;
header = new dnode<int>(0, two, one);
one = new dnode<int> (10, header, two);
two = new dnode<int> (25, one, header);
writeDLinkedList(header);
当我调用 writeDLinkedList 时,出现分段错误。我对此感到困惑,所以我最终尝试单独输出每个节点值以查看指针是否正常工作。事实证明他们不是。相反,我必须这样做才能使打印功能正常工作:
header = new dnode<int>;
one = new dnode<int> (10);
two = new dnode<int> (25);
header->next = one;
one->next = two;
two->next = header;
writeDLinkedList(header);
我想知道为什么我的构造函数没有按应有的方式工作。是初始化列表吗?