1. 程式人生 > >輸入一個連結串列的頭結點,從尾到頭反過來列印每個結點的值

輸入一個連結串列的頭結點,從尾到頭反過來列印每個結點的值

可以利用棧的結構來儲存,每經過一個結點的時候,把該結點放到一個棧當中去,當遍歷完整個連結串列後,再從棧頂開始主格輸出結點的值

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<<"-->";
	}
}
當然遞迴會呼叫堆疊比較多,所以要根據情況來看使用遞迴還是棧