从尾到头打印链表_牛客题霸_牛客网 (nowcoder.com)
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:
返回一个数组为[3,2,1]
0 <= 链表长度 <= 10000
示例1:
输入:{1,2,3}
返回值:[3,2,1]
示例2:
输入:{67,0,24,58}
返回值:[58,24,0,67]
函数参数所给的是指向头结点的指针,返回值为vector容器,因此我们可以直接按顺序将链表中的数据存入vector,然后利用reverse函数对容器内容进行翻转,即可得到对应结果。
因为题目要求是需要我们从尾到头打印链表,而栈的结构特点就是后进先出,因此我们可以把链表里面的数据压入栈中后依次弹出存入vector里面。
想要从尾到头打印链表,那么我们需要找到链表的最后一个结点,将其数据存入vector,然后再依次往前。这就可以利用递归遍历的思路,对整个链表进行遍历直至最后一个结点,然后把其存入vector后返回到上一层递归。
- #include
- class Solution {
- public:
- vector<int> printListFromTailToHead(ListNode* head) {
- vector<int> v;
- while(head){
- v.push_back(head->val);
- head=head->next;
- }
- reverse(v.begin(),v.end());
- return v;
- }
- };
- #include
- class Solution {
- public:
- vector<int> printListFromTailToHead(ListNode* head) {
- vector<int> 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;
- }
- };
- #include
- class Solution {
- public:
- void recursion(ListNode* head,vector<int>& v){
- if(head!=NULL){
- recursion(head->next, v);
- v.push_back(head->val);
- }
- }
- vector<int> printListFromTailToHead(ListNode* head) {
- vector<int> v;
- recursion(head, v);
- return v;
- }
- };