从尾到头打印链表

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

代码:使用栈

 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;
    }
};

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

posted @ 2017-08-31 02:16  Aaronsw  阅读(158)  评论(0编辑  收藏  举报