题目描述:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。
解题思路:这道题目是链表中的基础题,主要思路有两种
- 第一种思路:可以利用栈的特性“后进先出”,将链表从头到尾遍历,然后将元素放到栈中,最后再取出。
- 第二种思路:可以利用递归的思想,在链表遍历的时候,对于每个节点而言:如果next指针不为空,则先遍历next指向的链表,回退时在打印本节点的值。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
if(head==nullptr)
return vector<int> ();
stack<int> s;
ListNode *ptr=head;
vector<int> vec;
while(ptr!=NULL)
{
s.push(ptr->val);
ptr=ptr->next;
}
while(!s.empty())
{
vec.push_back(s.top());
s.pop();
}
return vec;
}
};
第二种思路用递归做的:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> vec;
vector<int>& printListFromTailToHead(ListNode* head) {
ListNode *ptr=head;
if(ptr!=nullptr)
{ if(ptr->next!=nullptr)
{
printListFromTailToHead(ptr->next);
}
vec.push_back(ptr->val);
}
return vec;
}
};