剑指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
posted @ 2022-04-06 14:16  YoungPzz  阅读(32)  评论(0)    收藏  举报