输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
第一种栈方法:
/**
* 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) {
//栈的方法
stack<int>mystack;
vector<int>res;
while(head){
mystack.push(head->val);
head = head->next;
}
// cout<<mystack.size()<<endl;
while(!mystack.empty()){
//这里要注意如何在栈里取值,stack.pop()函数没有返回值
//所以这里有些特殊,用头指针的方法
res.push_back(mystack.top());
mystack.pop();
}
return res;
}
};
第二种方法:递归:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void helper(ListNode*head, vector<int>&res){
if(head){
if(head->next){
helper(head->next, res);
}
res.push_back(head->val);
}
}
vector<int> reversePrint(ListNode* head) {
//递归的方法
vector<int>res;
helper(head,res);
return res;
}
};