输入一个了表的头节点,从尾到头反过来打印出每个节点的值
(1)非递归方法
第一个遍历到的节点最后一个输出,这这就是典型的“后进先出”,可以用栈实现这种顺序。每经过一个节点的时候,把该节点放到一个栈中,当遍历完整个链表的时候,再从栈顶开始逐个输出节点的值,此时输出的节点的顺序已经反过来了。
void PrintReversingly_Iteratively(ListNode* pHead)
{
std::stack<ListNode*>nodes;
ListNode* pNode=pHead;
while(pNode!=nullptr)
{
node.push(pNode);
pNode=pNode->pNext;
}
while(!node.empty())
{
pNode=node.top();
printf("%d\t",pNode->m_nValue);
nodes.pop();
}
}
(2)递归方法
递归在本质上就是一个栈结构,每访问到一个节点的时候,先递归输出它后面的节点,再输出节点自身,这样链表的输出结果就反过来了。
void PrintReversingly_Iteratively(ListNode* pHead)
{
if(pHead!=nullptr)
{
if(pHead!=nullptr)
{
if(pHead->m_pNext ! =nullptr)
{
PrintReversingly_Iteratively( pHead->m_pNext);
}
printf("%d\t",pNode->m_nValue);
}
}