class Solution {
public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){struct ListNode节点;
ListNode* head= &node;
ListNode* h=head;
int sum=0;
bool carry=false;
while(l1!=NULL||l2!=NULL)
{
sum=0;
if(l1!=NULL)
{
sum+=l1->val;
l1=l1->next;
}
if(l2!=NULL)
{
sum+=l2->val;
l2=l2->next;
}
if(carry)
sum++;
struct ListNode tmp;
tmp.val=sum%10;
tmp.next=NULL;
// cout<<&tmp<<endl;
// h->next=new ListNode(sum%10);
h->next=&tmp;
h=h->next;
// delete h->next;
carry=sum>=10?true:false;
}
if(carry)
{
h->next=new ListNode(1);
}
return head->next;
}
};
我认为这可能是因为您正在while
循环内的堆栈上创建tmp
,然后将其地址分配给h->next
。 一旦while
循环迭代结束,tmp
就不再在作用域中,但是您已经在h
中存储了对它的引用。 您需要在堆上创建tmp
才能使其工作,正如您通过将其创建为指针所发现的那样。