题目:输入一个链表,从尾到头打印链表每个节点的值。
输入:链表的表头
输出:需要打印的“新链表”的表头
面试小提示:在面试中如果我们打算修改输入的数据,最好先问面试官是不是允许做修改
解决这个问题肯定是要遍历链表,遍历的顺序是从头到尾的顺序,而输出的顺序是从尾部到头部,这是典型的“后进先出”,我们自然而然想到用“栈”来实现这种后进先出的结构。
这种思路的实现代码是:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(struct ListNode* head) {
vector<int> res;
std::stack<ListNode*> nodes;
ListNode* pnode=head;
while(pnode!=NULL)
{
nodes.push(pnode);
pnode=pnode->next;
}
while(!nodes.empty())
{
pnode=nodes.top();
res.push_back(pnode->val);
nodes.pop();
}
return res;
}
};