二重リンク リストのノードをいくつか作成して出力しようとしています。そこで、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;
}
主に、ヘッダー ポインターと 2 つのノードを作成し、コンストラクターを使用して循環リスト内の前後のノードを割り当てます。
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);
コンストラクターが正常に動作しない理由を知りたいです。初期化リストですか?