目录
一:题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
二:解题思路
第一种方式:递归
我们额外设置一个用来返回的vector
private:
vector<int> ret;
加入我们原来的vector里面是输入的【1,3,2】,那么我们新的vector里面的顺序就应该是【2,3,1】
所以,我们判断原vector的头指针是否为空,不为空就一直向后,直到最后一个数位置,再依次重后往前压入新的vector中
最后返回新vector即可
if(head)
{
reversePrint(head->next);//循环到最后一个数位置
ret.push_back(head->val);//从最后一个数往前压入新的vector中
}
return ret;//返回新的vector
代码:
class Solution {
private:
vector<int> ret;
public:
vector<int> reversePrint(ListNode* head) {
if(head)
{
reversePrint(head->next);
ret.push_back(head->val);
}
return ret;
}
};
第二种方式:栈
反正都是从后往前,那我们也可以用栈来存储,到时候从栈顶一个一个拿数据不也一样?
定义一个栈,和一个用来返回的vector
private:
stack<int> ret;
vector<int> num;
将数据全部入栈
if(head)
{
ret.push(head->val);
reversePrint(head->next);
}
将栈中的数据全部出栈到新vector里面,最后return即可
while(!ret.empty())
{
num.push_back(ret.top());
ret.pop();
}
return num;
代码:
class Solution {
private:
stack<int> ret;
vector<int> num;
public:
vector<int> reversePrint(ListNode* head) {
if(head)
{
ret.push(head->val);
reversePrint(head->next);
}
while(!ret.empty())
{
num.push_back(ret.top());
ret.pop();
}
return num;
}
};