空指针
1、指针一定要初始化,不然可能会是野指针,指向任何地址,例题两数相加,声明定义但没有初始化head指针导致指针指向的目的地址不对,一直指向传进来的链表l1。
2、两数相加空指针问题。直接利用指针指向的数进行相加,但当两个链表不一样长时,短链表出现空指针,执行错误,故需要int n获取指针指向的数字之后再通过n进行操作
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head;/* = (struct ListNode*)malloc(sizeof(struct ListNode));*/
struct ListNode *tail;
head=NULL;
tail=NULL;
int carry=0;
while(l1 || l2){
int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;
int sum = n1 + n2 + carry;
if(!head){
head=tail=malloc(sizeof(struct ListNode));
tail->val=sum%10+carry;//(l1->val+l2->val);
tail->next=NULL;
}
else{
tail->next=malloc(sizeof(struct ListNode));
tail->next->val=sum%10+carry;//(l1->val+l2->val);链表一长一短时出错,需要n1、n2、sum进行操作
tail=tail->next;
tail->next=NULL;
}
carry=sum/10;
if(l1){
l1=l1->next;
}
if(l2){
l2=l2->next;
}
}
if(carry>0){
tail->next=malloc(sizeof(struct ListNode));
tail->next->val=carry;
tail->next->next=NULL;
}
return head;
}