[剑指offer]从尾到头打印链表

穿插一下牛客的《剑指Offer》的题,也算是换换口味吧。感兴趣的童鞋也可以来试试呀:https://www.nowcoder.com/ta/coding-interviews?page=1

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:最简单的想法,利用栈的特性就行了。
solution1:
 1 /**
 2 *  struct ListNode {
 3 *        int val;
 4 *        struct ListNode *next;
 5 *        ListNode(int x) :
 6 *              val(x), next(NULL) {
 7 *        }
 8 *  };
 9 */
10 class Solution {
11 public:
12     vector<int> printListFromTailToHead(ListNode* head) {
13       vector<int> vec;
14       ListNode* p = head;
15       stack<int>st;
16       while(p != nullptr)
17       {
18         st.push(p->val);
19         p = p->next;
20       }
21       while(!st.empty())
22       {
23         vec.push_back(st.top());
24         st.pop();
25       }
26       return vec;
27     }
28 };

solution2:

思路:这种题目感觉可以用递归,但是如何书写递归才是难点。

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
       vector<int> vec;
       FromTailToHead(head,vec);
       return vec;
    }
    void FromTailToHead(ListNode* node,vector<int>& vec)
    {
      if(node == nullptr) return;
      FromTailToHead(node->next,vec);
      vec.push_back(node->val);
    }
};
原文地址:https://www.cnblogs.com/Swetchine/p/11273367.html