1. 翻转输出:O(n), O(1)
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int> res;
if (!head) return res;
while (head) {
res.push_back(head->val);
head = head->next;
}
return vector<int>(res.rbegin(), res.rend());
}
};
2.栈:O(n), O(n):额外需要一个stack空间
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int> res;
if (!head) return res;
stack<int> stk;
while (head) {
stk.push(head->val);
head = head->next;
}
while (!stk.empty()) {
res.push_back(stk.top());
stk.pop();
}
return res;
}
};
3.递归:
先递归至尾结点后的nullptr,再逆向push_back
class Solution {
private:
vector<int> res;
public:
vector<int> reversePrint(ListNode* head) {
if (!head) return res;
reversePrint(head->next);
res.push_back(head->val);
return res;
}
};
- 总结:
前两种方法都很容易;本题递归虽然时间很长,但这种使用递归造成逆向的思路值得学习