我試圖用遞歸方式在鏈表中的每個節點上打印數據,但是我越界了,所以我認爲我的遞歸函數有問題。遞歸地打印一個列表
這裏的頭文件:
class List
{
public:
void print(std::ostream &out) const {}
private:
Node *head;
void printList(std::ostream&, const Node*) const;
}
基本上,我是從公共print
函數調用的私人助手功能。下面是兩個函數的代碼:
void List::print(std::ostream& out) const
{
printList(out, head);
}
void List::printList(std::ostream& out, const Node* n) const
{
if(n->next == NULL) {
out << n->data << std::endl;
return;
}
out << n->data << std::endl;
printList(out, n->next);
}
我認爲問題出在我的if塊,因爲我需要停下來,如果沒有下一個節點,也是返回前打印在當前節點的數據,但由於我已在printList(out, n->next)
末尾撥打n->next
,我是否需要在我的if區塊中執行此操作?
有遞歸執行此操作的更好方法嗎?代碼是否適用於其他人?我似乎無法得到它的工作。
我寧願寫'無效列表::的printList(STD :: ostream的進出,常量節點* N)const的 { 如果(N == NULL){ 回報; } out << n-> data << std :: endl; printList(out,n-> next);爲簡單起見, –
您確定在創建節點時將節點的'next'指針初始化爲空指針嗎?或者至少確保列表中最後一個節點的'next'指針是空指針? –
在基本情況下是否正確將'n-> next'設置爲'nullptr'?或者它是一個隨機的,未初始化的地址? – RyanP