方法一:利用堆栈进行弹栈存储
思路如下:首先将链表中的值,按顺序存放到堆栈中去,然后利用栈先进后出的特性,将值弹出并保存到容器中去。
代码如下:
// class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> value;
ListNode *p=NULL;
p=head;
stack<int> stk;
while(p!=NULL)
{
stk.push(p->val);
p=p->next;
}
while(!stk.empty())
{
value.push_back(stk.top());
stk.pop();
}
return value;
}
};
方法二:利用容器的首尾交换
思路如下:先将链表按顺序存入容器,然后在容器内部利用临时变量temp进行首尾交换。
代码如下:
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> value;
ListNode *p=NULL;
p=head;
while(p!=NULL){
value.push_back(p->val);
p=p->next;
} //reverse(value.begin(),value.end()); //C++自带的翻转函数
int temp=0;
int i=0,j=value.size()-1;
while(i<j)
{
temp=value[i]; //也可以用swap函数,swap(value[i],value[j]);
value[i]=value[j];
value[j]=temp;
i++;
j--;
}
return value;
}
};
方法三:利用递归
思路如下:众所周知,递归可以很好的进行反向输出,需要注意的是其中容器需要定义为全局变量。
代码如下:
class Solution {
public:
vector<int> value;
vector<int> printListFromTailToHead(ListNode* head) {
ListNode *p=NULL;
p=head;
if(p!=NULL){
if(p->next!=NULL){
printListFromTailToHead(p->next);
}
value.push_back(p->val);
}
return value;
}
};