題目:輸入一個鏈表,從尾到頭打印鏈表每個節點的值。
首先分析這個題,如果面試官沒有指定說明不允許改變鏈表結構,首先會想到的是將鏈表的頭部和指針方向改變,但如果面試官說了不能改變鏈表結構,就得考慮別的方法,此刻你有沒有想到一種結構先進後出,對沒錯,就是棧,如果將鏈表順序遍歷一遍,將鏈表中的元素一一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);
}
}