题目描述

方法一:递归
思路
- 首先在 reversePrint 方法定义一个 vector v 来保存逆序后的链表的值;
- 在 reversePrint 方法里,首先判断 head 是不是链表结束的位置;
- 接着递归调用该方法;
- 最后将 head 指向的值 val 放在 v 的后面;
- 最终的 v 就是所求链表的逆序值。
代码
class Solution {
public:
vector<int> v;
vector<int> reversePrint(ListNode* head) {
if (head == nullptr) {
return {};
}
reversePrint(head->next);
v.push_back(head->val);
return v;
}
};
方法二:栈
思路
- 顺序遍历链表,将链表的值依次压栈,直至链表结束;
- 将栈顶元素放在 vector 的后面,然后将栈顶元素弹出,直至栈为空。
代码
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int> v;
stack<int> s;
while (head != nullptr) {
s.push(head->val);
head = head->next;
}
while (!s.empty()) {
v.push_back(s.top());
s.pop();
}
return v;
}
};