题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:链表只有指向下一个节点的指针,只能从前往后遍历,先遍历的后打印,先进后出,使用栈
递归的本质也是栈,也可以使用递归实现,访问一个节点时,先递归输出它后面的节点,再输出该节点自身!
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
//递归解法
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> ret;
printListFromTailToHead(head, ret);
return ret;
}
void printListFromTailToHead(ListNode* head, vector<int> &ret){
if(head != nullptr){
printListFromTailToHead(head->next, ret);
ret.push_back(head->val);
}
}
//非递归解法,使用栈
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> ret;
if(head == nullptr){
return ret;
}
stack<ListNode*> s;
while(head != nullptr){
s.push(head);
head = head->next;
}
while(!s.empty()){
ListNode* node = s.top();
ret.push_back(node->val);
s.pop();
}
return ret;
}
};