剑指offer_06 从头到尾打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2] 输出:[2,3,1]
这道题看似简单,但第一次用C语言实现实现起来,还是遇到很多坑的。
1 int* reversePrint(struct ListNode* head, int* returnSize){ 2 int stack[10000]; 3 int stack_top = 0; 4 struct ListNode *q =head; 5 while(q){ 6 stack[stack_top] = q->val; 7 q = q -> next; 8 stack_top ++; 9 } 10 *returnSize = stack_top; //⭐,注意此次的returnsize为返回值大小 11 int *res = (int*)malloc(sizeof(int)*(*returnSize)); 12 for(int i = stack_top - 1,j=0;i>=0;--i,++j){ 13 res[j] = stack[i]; 14 } 15 return res; //如果直接返回stack[],会造成内存太溢出 16 }
- 如 int* returnSize ,第一眼看去以为是用以返回的数组,其实只是个参数,莫名其妙以指针的形式绑定了
- 想到用栈来做,但第一次傻乎乎地居然写了一个栈的结构体,实属多此一举。用栈,其实就是用一个数组罢了。
- 返回值为int类型的数组,所以需要开辟一个对应大小的数组,不能直接返回stack,你想想,他可是10000