leetcode刷题笔记——2.两数相加
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/44c3dc9912e488b85d77a1cc31577b33.jpeg)
思路:简单的链表处理,不为空则将其值与另一链表相加,用carry保存进位信息。
需要注意的点是:
1、使用链表的节点之前一定要判断该节点是否为空节点
2、struct结构使用.表示其成员(读作“的”),而结构体的指针则用->表示其成员(读作“指向结构体的”)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *res = new ListNode(0); //保存头结点
ListNode *p = res;
int carry = 0;
while(l1 != nullptr || l2!= nullptr || carry!=0){
int l1val = 0;
int l2val = 0;
if(l1 == nullptr){ //使用链表的节点时,一定要保证该节点不为空
l1val = 0;
}else{
l1val = l1->val;
}
if(l2 == nullptr){
l2val = 0;
}else{
l2val = l2->val;
}
int sum = l1val + l2val + carry;
carry = sum/10;
ListNode *q = new ListNode(sum%10);
p->next = q;
p = q;
if(l1 != nullptr) l1 = l1->next; //使用链表的节点时,一定要保证该节点不为空
if(l2 != nullptr) l2 = l2->next;
}
return res->next;
}
};
提交过程共出错三次
两次错误相同:
Line 36: Char 22: runtime error: member access within null pointer of type ‘ListNode’ (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:45:22
为空指针出错,使用链表的节点前未判空
Line 18: Char 25: error: use of undeclared identifier ‘l2val’ int l1val = l2val = 0;
不可使用
int a=b=0;
错在b未定义。使用int a =0;int b=0;