从尾到头打印单链表

从尾到头打印单链表其实就是后进先出,而栈(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 <<" ";
    }
}
//如果链表非常长,不适合使用递归,会导致栈溢出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值