链表链接和防止空链表
注:本人菜鸡一个,以后就在LeetCode刷刷题这里就随便写点刷题体会吧
链表以前还是写过的,但是不是特别清楚其中的一些实际操作,这次写问题 2. Add Two Numbers,就出现了点小麻烦。
1.leetcode报错:member access within null pointer of type ‘struct ListNode’
这是我在使用指针p作为存储二者相加的各位数字是刚开始的错误。这就是说我使用的指针p可能是个空指针。刚开始我是将p=result->next(result是我malloc过的),而且在循环是的判断也没有p!=NULL。
struct ListNode* result=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* p=resul->next;
int low_digit=0;
int high_digit=0;
while((l1!=NULL)&&(l2!=NULL))
后来将p=result,在循环判断中加上p!=NULL解决。
struct ListNode* result=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* p=result;
int low_digit=0;
int high_digit=0;
while((l1!=NULL)&&(l2!=NULL)&&p!=NULL)
2.在每次循环中都申请了malloc了p->next,但是在当结果的位数与二者最大的位数相等时结果会多一个0。
因为我申请之后p的最后val默认为0,当没有该位是还是将0赋值,应该直接为NULL,所以加上一个判断条件。在满足该条件时申请(多一个0),不满足时不申请直接返回即可。
旧代码:
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
p=p->next;
新代码:
if(high_digit==0&&l1->next==NULL&&l2->next==NULL){
p->next=NULL;
return result;
}
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
p=p->next;