(一)问题描述
输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
(二)思路分析
通常打印是一个只读操作,所以不能改变原链表的结构。遍历的顺序是从头到尾,输出的顺序是从尾到头,这是栈“后进先出”的思想。所以我们可以用栈实现。每经过一个节点的时候,把该节点放到一个栈中,当遍历完整个链表后,再从栈顶开始逐个输出节点的值。
(三)代码实现
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
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;
stack<ListNode *> sta;
//将链表中的元素保存到栈中
while (head != NULL)
{
sta.push(head);
head = head->next;
}
//将栈中的元素保存到容器中
while (!sta.empty())
{
head = sta.top();
result.push_back(head->val);
sta.pop();
}
return result;
}
};
int main()
{
ListNode * head = new ListNode(1);
ListNode * tail = new ListNode(2);
head->next = tail;
Solution solution;
vector<int> v = solution.printListFromTailToHead(head);
for (auto it = v.begin(); it != v.end(); ++it)
{
cout <<*it<< " ";
}
cout << endl;
return 0;
}
(四)运行结果