从尾到头打印单链表其实就是后进先出,而栈(stack)就是后进先出的,从而可以利用栈来实现逆序打印单链表
//定义链表节点
typedef struct ListNode
{
int data;
struct ListNode * next;
}Node,*PNode,**PPNode;
利用栈实现
#include<iostream>
#include<stack>//使用栈必须包含
using namespace std;
void Print_Tail_Head_node(PNode _node)
{
stack<PNode> node;//定义一个栈
PNode tmp = _node;
while (tmp != NULL)
{
node.push(tmp);//入栈
tmp = tmp->next;
}
while (!node.empty())
{
tmp = node.top();//返回栈内的下一个元素
cout << tmp->data << " ";
node.pop();//出栈
}
}
利用递归实现
递归的本质就是一个栈结构,从而可以用递归实现从尾到头打印单链表
void Print_Tail_Head_node(PNode _node)
{
if (_node != NULL)
{
if (_node->next != NULL)
{
Print_Tail_Head_node(_node->next);
}
cout << _node->data <<" ";
}
}
//如果链表非常长,不适合使用递归,会导致栈溢出