第一题
/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        
        // 这些编程网站一直喜欢搞的边界问题
        // 有一个head=[]
        // 这种边界问题就是测试那种工作的人 要研究的
        if(head == NULL)
            return vector<int>(0);
        // 保存头结点 后面 第一次遍历知道长度 就走了
        ListNode *temp;
        temp=head;
        int len=0;
        // 知道长度
        while (!head->next==NULL){
            head=head->next;
            len++;
        }
        head=temp; 
        // 定义vector数字的代码用来回答
        vector<int> ans(len+1);
        // 反向检查 填充回数组
        for (int i =len;i>=0;i--){
            ans[i]=head->val;
            head=head->next;
        }
        return ans;
//         // 这些编程网站一直喜欢搞的边界问题
//         // 有一个head=[]
//         // 这种边界问题就是测试那种工作的人 要研究的
//         if(head == NULL)
//             return vector<int>(0);
//         vector<int> ans;
//         while (!head->next==NULL){
//             ans.insert(ans.begin(),head->val);
//             head=head->next;
//         }
//         ans.insert(ans.begin(),head->val);
//         return ans;
    }
};