题目描述:
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
链表定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
思路:用栈实现;用递归实现。但当链表非常长时,导致函数调用层级过深,可能会导致栈溢出,选择用栈实现就相对说好一点。
代码实现:
void PrintListFromTailToHead1(ListNode* pHead)
{
stack<ListNode*> nodes;
ListNode* pNode=pHead;
while(pNode!=NULL)
{
nodes.push(pNode);
pNode=pNode->m_pNext;
}
while(!nodes.empty())
{
pNode=nodes.top();
printf("%d",pNode->m_nKey);
nodes.pop();
}
}
void PrintListFromTailToHead2(ListNode* pHead)
{
if(pHead!=NULL)
{
if(pHead->m_pNext!=NULL)
{
PrintListFromTailToHead2(pHead->m_pNext);
}
printf("%d ",pHead->m_nKey);
}
}