问题:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)
代码
int* reversePrint(struct ListNode* head, int* returnSize){
struct ListNode*p=head;
int cnt=0;
while(p){ //遍历链表得到链表结点数量
num++;
p=p->next;
}
*returnSize=num;---------------------------------------------------------------------------------------1
int* ans=(int*)malloc(num*sizeof(int));
int i=num-1;-------------------------------------------------------------------------------------------------2
p=head;
while(p){
ans[i--]=p->val; //倒序将链表元素放入数组
p=p->next;
}
return ans;
}
问题1:1处若提前转换为序数减1,则引发越界,原因是malloc开辟的空间不足导致后续数组填入时没有空间
问题2;2处若没有减1,引发的越界为ans[0]=p->val;而此时p=null
链表反转输出:理解越界问题与解决方案
这篇博客探讨了链表逆序打印的问题,重点在于理解代码中可能出现的数组越界错误。在1处,如果提前转换为序数减1会导致内存分配不足;而在2处,若不减1,则会在尝试存入第一个元素时遇到空指针。解决方案是正确计算数组长度并在适当位置进行索引操作。
2万+

被折叠的 条评论
为什么被折叠?



