輸入一個連結串列的頭結點,從尾到頭反過來列印每個結點的值
阿新 • • 發佈:2018-12-30
可以利用棧的結構來儲存,每經過一個結點的時候,把該結點放到一個棧當中去,當遍歷完整個連結串列後,再從棧頂開始主格輸出結點的值
struct ListNode { int m_nKey; ListNode* m_pNext; }; void PrintListReversingly_Iteratively(ListNode* pHead) { std::stack<ListNode*> = pHead; ListNode* pNode = pHead; while(pNode != NULL) { nodes.push_back(pNode); pNode = pNode->m_pNext; } while(!nodes.empty()) { pNode = nodes.top(); cout<<pNode->m_nValue<<"-->"; nodes.pop(); } cout<<endl; }
由此可以想到使用遞迴的方法,我們每訪問到一個結點的時候,先遞迴輸出它後面的結點,再輸出該結點本身,這樣輸出結果自然就反過來的。
void PrintListReversingly_Recursively(ListNode* pHead)
{
if(pHead != NULL)
{
if(pHead->m_pNext != NULL)
{
PrintListReversingly_Recursively(pHead->m_pNext);
}
cout<<pHead->m_nValue<<"-->";
}
}
當然遞迴會呼叫堆疊比較多,所以要根據情況來看使用遞迴還是棧