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