【剑指offer03逆向输出链表】

题目描述

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
 
先反转链表,再存入vector
注意链表->next的时候,都判断下此时是否为空,不然很容易越界
/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> ans;
        if(!head) return ans ;
        if(!head->next){ans.push_back(head->val);return ans;}
        //将链表反置
        ListNode *pre = head ;
        ListNode *t = pre->next;
        ListNode *t_next = t?t->next:nullptr;
        head->next = nullptr;
        while(t){
            t->next = pre ;
            pre = t ;  t = t_next ;  t_next = t_next? t_next->next:nullptr;
        }
        ListNode *tmp = pre ; //现在指向尾
        while(tmp){
            ans.push_back(tmp->val);
            tmp = tmp->next ;
        }
        
        return ans ;
    }
};
原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13123959.html