一:题目描述
输入一个链表,从尾到头打印链表每个节点的值。
二:解题思路
方法一:从尾到头打印链表,也就是第一个遍历的节点最后一个输出,最后一个遍历的节点第一个输出,后进先出,可以用栈的形式实现
方法二:递归在本质上是一种栈结构,用递归的方式实现
我们每访问到一个节点,先输出它后面的节点,在输出节点自身
三:代码实现
方法一:
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
//从尾到头打印链表,也就是第一个遍历的节点最后一个输出,最后一个遍历的节点第一个输出
//后进先出,可以用栈的形式实现
vector<int> result;
std::stack<ListNode*> nodes; //创建栈
ListNode* pNode=head;
while(pNode!= NULL){
nodes.push(pNode); //进栈
pNode=pNode->next;
}
while(!nodes.empty()){
pNode=nodes.top(); //获得栈顶元素
result.push_back(pNode->val);
nodes.pop(); //出栈
}
return result;
};
方法二:
class Solution {
public:
void printListFromTailToHead1(ListNode* head,vector<int> &result) {
if(head!= NULL ){
if(head->next!=NULL){
printListFromTailToHead1(head->next,result);
}
result.push_back(head->val);
}
}
vector<int> printListFromTailToHead(ListNode* head) {
//方法二:递归在本质上是一种栈结构,用递归的方式实现
//我们每访问到一个节点,先输出它后面的节点,在输出节点自身
vector<int> result;
if(head!= NULL ){
if(head->next!=NULL){
printListFromTailToHead1(head->next,result);
}
result.push_back(head->val);
}
return result;
}
};