トピック5:頭に尾からのリストを印刷

////////////////////////////////////////////////// ////////////////////////////////////////////
// 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; 

}

おすすめ

転載: www.cnblogs.com/yzdai/p/11258607.html
おすすめ