问题遇到的现象和发生背景
两数相加,都刷过吧。
问题相关代码,请勿粘贴截图
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *head = new ListNode(0, nullptr); // 结果节点
ListNode *_head_ = head; // 工作指针
int carry = 0; // 进位
if(l1 == nullptr) return head;
if(l2 == nullptr) return head;
while(l1->next != nullptr || l2->next != nullptr) // 有一个结点不为空时执行
{
ListNode *num = new ListNode((l1->val + l2->val + carry) % 10, nullptr); // 每一位数
_head_->next = num; // 连接
carry = (l1->val + l2->val - num->val) / 10; // 进位(如果有的话)
l1 = (l1->next != nullptr) ? l1->next : 0; // 继位
l2 = (l2->next != nullptr) ? l2->next : 0; // (之前倒在这,有没有都继位)
}
if(carry == 1) {
ListNode *num = new ListNode(1, nullptr); // 这里也是,我太菜了
_head_->next = num; // 最后的结点
}
return head->next; // 返回第一个节点
}
};
运行结果及报错内容
Line 21: Char 57: runtime error: member access within null pointer of type 'ListNode' (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:30:57
我的解答思路和尝试过的方法
添加了这两行代码:
if(l1->val == 0) return head;
if(l2->val == 0) return head;
我想要达到的结果
正确了就行