Я пытаюсь создать несколько узлов для дважды связанного списка и распечатать их. Так что я создаю мой 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;
}
В основном, я создаю указатель заголовка и два узла, используя constuctor назначить предыдущие и последующие узлы в круговом списке:
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);
Я хочу знать, почему мой конструктор не работает так, как надо. Это список инициализации?
'prev' и' next' должны быть инициализированы до 'NULL', а не' this'. Затем проверки для действительных узлов должны быть обновлены, чтобы искать «NULL» во время цикла. –