剑指offer 编程题 -- 从尾到头打印链表

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

/**

*  struct ListNode {

*        int val;

*        struct ListNode *next;

*        ListNode(int x) :

*              val(x), next(NULL) {

*        }

*  };

*/

 

扫描二维码关注公众号,回复: 5429467 查看本文章

方案1:使用两个vector,一个vector用于在链表遍历的时候存储链表中的val值,然后方向输出值保存到另一个vector中。

class Solution {

public:

    vector<int> printListFromTailToHead(ListNode* head) {

        ListNode* p;

        p = head;

        vector<int> tmp;

        while(p != NULL){

            tmp.push_back(p->val);

            p = p->next;          

        }

       

        vector<int> result;

       // for(int i = 0;i<tmp.size();i++){

         //   result.push_back(tmp[tmp.size()-i-1]);        

        //}

        for(int i = tmp.size()-1;i>=0;i--){

            result.push_back(tmp[i]);

        }

        return result;

    }

};

运行时间:3ms

占用内存:480K                           

参考链接:https://blog.csdn.net/qq_31442743/article/details/81153874

 

方案2:

利用栈的先入后出特征,使用一个栈来存储链表中的val值,然后依次出栈保存到vector中。

class Solution {

public:

    vector<int> printListFromTailToHead(ListNode* head) {

        vector<int> result;

        stack<int> st;

        while(head != NULL){

            st.push(head->val);

            head = head->next;

        }

        while(!st.empty()){

            result.push_back(st.top());

            st.pop();

        }

        return result;

    }

};

运行时间:3ms

占用内存:460K

 

C++中stack:

  • push()会将一个元素放入stack中。
  • top()会返回stack中的栈顶元素,返回的是reference,可以就地修改值。
  • pop()移除栈顶元素,无返回值。
  • size()返回stack长度。
  • empty()返回stack是否为空。

 

参考链接:

http://www.cnblogs.com/liguo-wang/p/9460292.html

https://www.cnblogs.com/ChinaHook/p/6985544.html

 

 

方案3:

用递归的方法,递归到最后一个节点,然后开始保存数据。

class Solution {

public:

    vector<int> result;

    vector<int> printListFromTailToHead(ListNode* head) {

       

        if(head != NULL){

            printListFromTailToHead(head->next);

            result.push_back(head->val);

     

        }

 

        return result;

    }

};

 

运行时间:3ms

占用内存:504K

参考链接:

https://blog.csdn.net/qq_29519041/article/details/81487151

注意:注意判断条件。

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/mmg188/article/details/85073584