方法一:
// 法一:reverse 答案数组. 时间:O(n);空间:O(n). 4ms; 8.5MB
class Solution {
public:
vector<int> printListReversingly(ListNode* head) {
vector<int> res;
while (head) {
res.push_back(head->val);
head = head->next;
}
// reverse(res.begin(), res.end());
// return res;
return vector<int>(res.rbegin(), res.rend());
}
};
注意下面:
return vector<int>(res.rbegin(), res.rend());
#include <iostream>
#include <vector>
int main() {
std::vector<int> res = {1, 2, 3, 4, 5};
std::vector<int> reversed_res(res.rbegin(), res.rend());
for (int i : reversed_res) {
std::cout << i << " ";
}
return 0;
}
vector的相关用法参考文:
C++ 容器中 begin()、cbegin()、rbegin()、crbegin-CSDN博客
方法二:
// 法二:递归. 时间:O(n);空间:栈空间O(n). 4ms; 10.8MB
class Solution {
public:
vector<int> printListReversingly(ListNode* head) {
if (!head) return {};
auto res = printListReversingly(head->next);
res.push_back(head->val);
return res;
}
};
//这个是创建一个vector,上面那个auto res其实就是创建的过程,auto会自动识别出res是一个vector
class Solution {
public:
vector<int> printListReversingly(ListNode* head) {
vector<int> res;
if(!head) return {};
res = printListReversingly(head->next);
res.push_back(head->val);
return res;
}
};
方法三:
// 法三:辅助栈法. 时间:O(n);空间:O(n). 4ms; 8.5MB
class Solution {
public:
vector<int> printListReversingly(ListNode* head) {
stack<int> s;
while(head)
{
s.push(head->val);
head = head->next;
}
vector<int> v;
while(!s.empty())
{
v.push_back(s.top());
s.pop();
}
return v;
}
};
class Solution {
public:
vector<int> printListReversingly(ListNode* head) {
stack<int> s;
while (head) {
s.push(head->val); // 存的是 val
head = head->next;
}
int n = s.size();
vector<int> res(n);
for (int i = 0; i < n; i ++ ) {
res[i] = s.top();
s.pop();
}
return res;
}
};