从尾到头打印链表

思路分析:从尾到头,凡是遇到这种逆序问题,可以先考虑用栈,因为栈是先进后出;也可以考虑使用题归,不过递归确实比较灵活,不好掌握。还有一个比较直观的思路就是先把链表反转,然后再从头到尾打印。

代码:使用栈

 1 class Solution{
 2 public:
 3      //写函数名呗
 4     vector<int> printListFromTailToHead(ListNode* pHead){
 5         //定义一个临时栈
 6         stack<int>temp;
 7         vector<int>res;
 8         //遍历这个列表
 9         while(pHead){
10             temp.push(pHead->val);
11             pHead = pHead->next;
12         }
13         //讲数从栈中弹出
14         while(temp.size()){
15             res.push_back(temp.top());
16             temp.pop();
17         }
18         return res;
19     }
20 };

代码主要还是借鉴别人的,主要还是肚子里没有墨水,经过训练就没有问题。其实思路相当简单,就是能不能在听到题目之后就立即手写出来呢,并且没有bug呢?这才是真整的能力,知识内化了,难道不比脑中没有知识强多了。

思路2:递归实现。

class Solution{
public:
     //写函数名呗
    vector<int> printListFromTailToHead(ListNode* pHead){
        //定义一个要返回的数组
        vector<int>res;
        //把握住递归的特点,保留现场,开启新的场景,返回现场。
        if(pHead){
            val = pHead->val;
            pHead = pHead->next;
            res = printListFromTailToHead(pHead);
            res.push_back(val)
        }
        return res;
    }
};

递归,我目前最好的理解就是“保留现场,开启新的现场,回到现场”。比较抽象,递归必须要大量的练习。

转载于:https://www.cnblogs.com/aaronsw/p/7456311.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值