题目描述
输入一个链表,从尾到头打印链表每个节点的值。
解题思路
两种方法。第一种是递归法,对于每个节点head,先从尾到头打印以head->next为头节点的链表,再打印head本身的值。
第二种方法用栈,从前到后遍历一遍链表,将每个节点的值依次压到栈中,然后再将栈中元素依次出栈即可。
代码
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
if (!head)
return result;
//递归法
/*
if (head->next == NULL)
{
result.push_back(head->val);
return result;
}
result = printListFromTailToHead(head->next); //递归,先打印后面的节点
result.push_back(head->val); //再打印当前结点
return result;*/
//用栈法
std::stack<int> valStack;
while (head != NULL)
{
valStack.push(head->val);
head = head->next;
}
while (!valStack.empty())
{
result.push_back(valStack.top());
valStack.pop();
}
return result;
}
};