leetcode第二题本机结果正确,提交错误

1、提交错误用例:[9] [9],本机输出[8,1],提交后输出[9,1]

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
static int c = 0;
struct ListNode *l3 = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *temp = NULL;
memset(l3,0,sizeof(struct ListNode));
if(l1 && l2)
{
c += l1->val + l2->val;
l3->val = c%10;
c = c/10;
printf("c %d\n",c);
if(l1->next && l2->next)
{
l1 = l1->next;
l2 = l2->next;
l3->next = addTwoNumbers(l1,l2);
}
else
{
if(c)
{
struct ListNode *temp = (struct ListNode *)malloc(sizeof(struct ListNode));
memset(temp,0,sizeof(struct ListNode));
temp->val = c;
temp->next = NULL;
l3->next = temp;
}
}
}
printf("===%d\n",l3->val);
return l3;
}


好像提交一直有问题 没必要提交阿 测试通过就行了 提交没什么意义 还浪费时间

if(c)
{
struct ListNode *temp = (struct ListNode *)malloc(sizeof(struct ListNode));
memset(temp,0,sizeof(struct ListNode));
temp->val = c;
temp->next = NULL;
l3->next = temp;
加个 c = 0; 会好点,不会让上次的结果影响到下次的计算,因为毕竟你的是static 变量
}


最大的问题就是静态局部变量,你使用递归去计算一个表达式,所以你想把c设置成静态局部变量保证正确性。
但是你有没有想过多个表达式计算的时候,外部循环调用函数的时候,你怎么保证c的正确性。计算下一个表达式的时候,c还是不是从0开始的.
而且这种问题你不使用迭代,却使用递归。会不会增加额外的开销成本,开销成本的增大会不会影响你程序的执行效率。