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))



京公网安备 11010502036488号