我正在嘗試爲雙向鏈表創建幾個節點並將它們打印出來。所以我創建我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) {}
};
然後我有我寫列表功能:
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」。 – 2013-04-23 21:46:22