再帰を使用してリンクリストの各ノードにデータを印刷しようとしていますが、範囲外のエラーが発生しているため、再帰関数に問題があると思います。リストを再帰的に印刷する
class List
{
public:
void print(std::ostream &out) const {}
private:
Node *head;
void printList(std::ostream&, const Node*) const;
}
は基本的に、私は公共のprint
関数からプライベートヘルパー関数を呼び出しています:
は、ここでヘッダファイルです。ここでは、2つの関数のコードは次のとおりです。
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);
}
私は私は次のノードが存在しない場合に停止するだけでなく、返す前に、現在のノードのデータを印刷しますが、以来、する必要があるため、問題は、私の場合はブロック内にあると思います私はすでにprintList(out, n->next)
の末尾にn->next
と呼んでいます。私はifブロックでそれをする必要がありますか?
再帰的に行うより良い方法はありますか?コードは他の誰のためにも使えますか?私はそれを働かせるように見えません。
私はむしろ '無効リストを記述します::がprintlist(STD :: ostreamに&アウト、constのノード* n)でのconst { 場合(N == NULL){ リターン。 } out << n-> data << std :: endl; printList(out、n-> next); } 'を使用します。 –
ノードの作成時に、ノード 'next'ポインタをヌルポインタに初期化してもよろしいですか?あるいは、少なくともリストの最後のノードの 'next'ポインタがヌルポインタであることを確認してください。 –
'n> next'は基本ケースの' nullptr'に正しく設定されていますか?それとも、ランダムで初期化されていないアドレスですか? – RyanP