题目描述
输入一个链表,从尾到头打印链表每个节点的值。
算法描述(非递归)
1.从头到尾遍历链表,将每个结点存入栈中
2.遍历输出栈(由于剑指offer给的返回值为vector<int>
,所以遍历栈的时候将元素在存入vector中)
代码
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> v;
if(head == NULL)
return v;
stack<int> s;
while(head){
s.push(head->val);
head=head->next;
}
while(!s.empty()){
v.push_back(s.top());
s.pop();
}
return v;
}
算法描述(递归)
1.采用递归的方式,首先递归到尾结点,然后将结点值存入vector
2.利用递归退层回到上一个结点,再存入vector
3.注意vector要传引用,否则不同的函数栈帧中没有同一个vector
代码
void printListFromTailToHead(ListNode* head,vector<int>& v){
if(head == NULL)
return ;
printListFromTailToHead(head->next,v);
v.push_back(head->val);
}
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> v;
printListFromTailToHead(head,v);
return v;
}