int* printListFromTailToHead(struct ListNode* phead, int* returnSize ) 
{
    int count=0;
    struct ListNode* pnode=phead;
    while(pnode!=NULL)
    {
        count++;
        pnode=pnode->next;
    }
    *returnSize=count;
    int *arr=malloc(sizeof(int)*count);
    
    //O(n^2)
    /*for(int i=0;i<count;i++)
    {
        struct ListNode* pnode=phead;
        for(int j=0;j<count-i-1;j++)
        {
            pnode=pnode->next;
        }
        arr[i]=pnode->val;
    }*/
    
    //O(n)
    pnode=phead;
    while(pnode!=NULL)
    {
        
        arr[--count]=pnode->val;
        pnode=pnode->next;
    }
    return arr;
}
纯C代码

第一种就是每次访问链表,从尾部开始依次存储数据到数组中,这种方法实在是烂!(没错,我写出来的)

第二种就是操控数组进行存储,从数组的末尾开始存储,此时就不需要每进1次循环就要把链表向后遍历了,只需要每次遍历时向后开始存储到数组里就可以了!(O(N))