剑指offer--从尾到头打印链表

来源:互联网 发布:单片机最小系统仿真图 编辑:程序博客网 时间:2024/06/05 05:45

题目描述

输入一个链表,从尾到头打印链表每个节点的值。

算法描述(非递归)

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;   }
原创粉丝点击