方法一:
直接创建一个vector,遍历链表,将链表的每一个值val放入容器中,最后使用vector的函数reverse(v.begin(),v.end())使得数据反转
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
ListNode *p = head;
vector<int> res;
while(p!=NULL){
res.push_back(p->val);
p = p->next;//忘了写了
}
reverse(res.begin(),res.end());
//不用上面函数,可以使用swap函数或者中间变量交换顺序
// int i=0,j = res.size()-1;
// while(i<j){
// swap(res[i],res[j]);
// i++;
// j--;
// }
return res;
}
};
方法二:
利用递归,先递推至链表末端;回溯时,依次将节点值加入列表,即可实现链表值的倒序输出。
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
recur(head);
return res;
}
private:
vector<int> res;
void recur(ListNode* head) {
if(head == nullptr)
return;
recur(head->next);
res.push_back(head->val);
}
};
方法三:
链表只能 从前至后 访问每个节点,而题目要求 倒序输出 各节点值,这种 先入后出 的需求可以借助 栈 来实现。
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
stack<int> stk;
while(head!=NULL){
stk.push(head->val);
head = head->next;
}
vector<int> res;
while(!stk.empty()){
res.push_back(stk.top());
stk.pop();
}
return res;
}
};