劍指offer--指定鏈表逆序打印

    題目:輸入一個鏈表,從尾到頭打印鏈表每個節點的值。
           首先分析這個題,如果面試官沒有指定說明不允許改變鏈表結構,首先會想到的是將鏈表的頭部和指針方向改變,但如果面試官說了不能改變鏈表結構,就得考慮別的方法,此刻你有沒有想到一種結構先進後出,對沒錯,就是棧,如果將鏈表順序遍歷一遍,將鏈表中的元素一一PUSH進棧中,然後再將數據一個個拿出來訪問,此刻,順序就逆置了,然而還有優化的餘地,那就是採用遞歸的方法;

//輸入一個鏈表,從尾到頭打印鏈表每個節點的值。 
struct ListNode
{
	int _key;
	int _value;
	ListNode *_next;
}
void PrintReversList(ListNode *PHead)
{
	std::stack <ListNode*> node;
	ListNode *pNode = PHead;
	while(pNode != NULL)
	{
		node.push(pNode);
		pNode = pNode->_next;
	}
	while(!node.empty())
	{
		pNode = node.top();
		printf("%d\t",pNode->_value);
		node.pop();
	}
}

//遞歸實現
void  PrintListRevers(ListNode *pHead)
{
	if(pHead != NULL)
	{
		if(pHead->_next != NULL)
		{
			PrintListRevers(pHead->_next);
		}
		printf("%d\t",pHead->_value);
	}
}


發佈了66 篇原創文章 · 獲贊 17 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章