////////////////////////////////////////////////// ////////////////////////////////////////////
// 8.タイトル5 :尾からのリストのプリントヘッド
@ 方法:時間O(n)のOの、空間的な複雑さ(N-)の複雑さ のテンプレート<typenameにTYPE> のボイド ReversePrintList1(ListNode <TYPE> * •PNODE) { アサート(NULL!= •PNODE); スタック <ListNode <TYPE> *> stStack; 一方(•PNODE) { stStack.push(•PNODE); •PNODE = pNode-> m_pNextNode; } COUT << " リスト印刷リバース:" << ENDLを、 一方(!stStack.empty()) { ListNode <TYPE > * = pTmpNode stStack.top()。 printf( " %02D - > "、pTmpNode-> m_stData); stStack.pop(); } のputchar(10 ); } // 方法2:再帰的(再帰スタックの実装が類似している) // Oの時間複雑度(N)宇宙の複雑さO(N) // 注:リストが非常に長い場合、それは関数呼び出しスタックオーバーフローが生じ、深いレベルの関数呼び出しにつながります!!! テンプレート<typenameにTYPE> のボイド ReversePrintLisHEAP_TYPE(ListNode <TYPE> * •PNODE) { IF(!•PNODE) { リターン; } ReversePrintLisHEAP_TYPE(•PNODE - > m_pNextNode); のprintf(" %02D - > "、pNode-> m_stData); } ボイドReversePrintListTestFunc() { COUT << " \ n \ n --------------- ReversePrintListTestFuncスタート--------------> " << ENDL ; const int型 MAX_LIST_NODE_COUNT = 10 ; INT aiArray [MAX_LIST_NODE_COUNT] = { 0 }。 INITIALIZE_ARRAY(aiArray、MAX_LIST_NODE_COUNT)。 TRAVERSAL_ARRAY(aiArray、MAX_LIST_NODE_COUNT)。 CSingleList < 整数 > * PLIST = 新しい CSingleList < 整数 > (); もし(! PLIST) { 返します。 } のために(int型 i = 0 ; iは<MAX_LIST_NODE_COUNTと、iは++ ) { PLIST - > 挿入(aiArray [I])。 } PLIST - > トラバーサル(); ReversePrintList1(PLIST - > GetHeadNode()); 裁判所未満 << " 递归实现链表逆序打印:" << てendl; ReversePrintLisHEAP_TYPE(PLIST - > GetHeadNode()); putchar(10 )。 削除PLISTを。 PLIST = NULL; COUT<< " \ N \ N --------------- ReversePrintListTestFunc終了--------------> " << てendl; }