Spaces:
Runtime error
Runtime error
错误代码分析,两数相加
#2
by Arcadia822 - opened
code:
class Solution {
public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
struct ListNode *p,*q;
p=l1;
q=l2;
int count1=0;
int count2=0;
int count=0;
int i=1;
int j=1;
while(p!=NULL){
count1=(p->val)*i+count1;
p=p->next;
i=i*10;
} while(q!=NULL){
count2=(q->val)*j+count2;
q=q->next;
j=j*10;
}
int a=1;
struct ListNode *head=NULL;
count=count1+count2;
struct ListNode *r;
r=head;
while(count/a){
head=(struct ListNode*)
malloc(sizeof(struct ListNode));
int b=10;
head->val=count/a%b;
head->next=NULL;
while(r==NULL||r->next==NULL){
return head;
}
r->next=head; r=head; a=a*10;
}
return head;
}
};
😃: 请问这段代码中有什么问题吗?
🤖: 亲爱的,你的代码有以下几个问题:
你试图手动执行链表中的数值之和,这是不必要的。C++已经为我们提供了各种方便的数学运算,我们只需要一位一位地从链表中取出数字,然后相加即可。你的方法可能会造成溢出,特别是当链表长度很长的时候。
你创建了一个新节点,但是使用了
malloc分配内存。在C++中,我们通常使用new来分配内存,因为new除了分配内存外,还会调用对象的构造函数。而malloc只是简单地分配内存,并不会调用构造函数。你的代码中,链表的头节点可能会被改变。你应该创建一个临时的头节点,然后返回这个临时头节点。
在你的代码中,你在while循环中返回了head,这意味着你只会处理一个节点,然后函数就返回了。这是不正确的,你应该处理完所有的节点,然后再返回结果。
你的代码中,如果count是0,那么你的代码将返回一个空指针。但是根据题目的要求,如果两个数字的和是0,你应该返回一个值为0的节点,而不是一个空指针。
希望以上的建议对你有所帮助,亲爱的。