题目
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
思路
我最开始的思路还是索引倒填解决,AC之后看题解,才想起这不是栈吗。(递归也是栈的一种
收获
最大的收获就是递归解法,如果在某行递归的话,就会在那一行开始建栈,所以可以把out指令放在下一行,实现类似反转的效果,因为他是递归完了之后从最深的一次开始向外执行,先执行最深的out指令。
stack的pop不返回什么元素,取栈顶方法是top()
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
///法一
vector<int> reversePrint(ListNode* head) {
int len =-1;
ListNode* tmp =head;
while(tmp!=NULL){
tmp=tmp->next;
len++;
}
tmp = head;
vector<int> v(len+1);
while(len>=0){
v[len--]=tmp->val;
tmp=tmp->next;
}
return v;
}
法二 栈
vector<int> reversePrint(ListNode* head){
stack<int> s;
vector<int> v;
while(head){
s.push(head->val);
head = head->next;
}
while(!s.empty()){
v.push_back(s.top());
s.pop();
}
return v;
}
//法三递归
vector<int> ans;
vector<int> reversePrint(ListNode* head){
if(head==NULL) return ans;
else{
reversePrint(head->next);
ans.push_back(head->val);
}
return ans;
}
};