【データ構造】単一チェーンテーブルデータを逆順に出力する

1180 ワード

考え方:再帰.形式は(このデータを出力した後のチェーン値)+このデータを出力します.
特に、ヘッドノードを持つシングルチェーンテーブルでは、前に進むべきビットがあり、チェーンテーブルがスタートノードを指します.コードは以下の通りです
void printDeverse_main(LinkList List)
{
	List = List->next;//       
	printDeverse(List);
}
再帰コード:
void printDeverse(LinkList List)
{
	if (List == NULL)
	{
		return;
	}
	if (List->next != NULL)
	{
		printDeverse(List->next);
		cout << " " << List->data;
	}
	if (List->next == NULL)
	{
		cout<< List->data;
	}
}
標準的な答えはより簡潔に見える:
void reprint(LinkList List)
{
	if (List != NULL)
	{
		reprint(List->next);
		cout << List->data << " ";
	}
}
分析:
再帰はとても教条的です.
1.まず一般的な状況を考慮して、このデータを出力したら、再度この関数を呼び出すべきです.
	if (List->next != NULL)
	{
		printDeverse(List->next);
		cout << " " << List->data;
	}
2.出力が完了したらこのデータがない場合、呼び出します.
	if (List->next == NULL)
	{
		cout<< List->data;
	}
3.チェーンが空なら、
	if (List == NULL)
	{
		return;
	}
実はこの3つの状況は概況的には標準的な答えです.チェーンが空でない場合は再帰的に呼び出してデータを出力します.チェーンが空になったら、しません.簡潔明瞭である.私のは余計です.