成员访问空指针内部
在写第二题时出现,原因是试图使用访问空指针成员。
要排除所有的空指针情况
题目:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
修改前:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int t=0;
struct ListNode* p=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* new=p;
while(t||l1->val||l2->val){ //while的判断,明显的会访问空指针
t=l1->val+l2->val+t; //如果只改while的判断,这句也会访问空指针
l1=l1->next;
l2=l2->next;
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
p->next->next=NULL;
p->next->val=t%10;
p=p->next;
t/=10;
}
return new->next;
}
结果:
修改后:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
int t=0;
struct ListNode* p=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* new=p;
while(t||l1||l2){
if(l1) t += l1->val,l1=l1->next; //记得相应的修改t的使用
if(l2) t += l2->val,l2=l2->next;
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
p->next->next=NULL;
p->next->val=t%10;
p=p->next;
t/=10;
}
return new->next;
}
结果: