思路 先把两个链表补成一样的长度,再用递归方法错误 注意函数里面用指针时也要提前在外面分配内存,不然LeetCode会报错 要记得新建结构体也要malloc
void add(struct ListNode
* l1
, struct ListNode
* l2
, int *count
){
if(l1
->next
!=NULL && l2
->next
!=NULL)
add(l1
->next
, l2
->next
, count
);
int sum
= l1
->val
+ l2
->val
+ *count
;
if(sum
>=10){
*count
= 1;
l1
->val
= sum
%10;
}
else{
*count
= 0;
l1
->val
= sum
;
}
return;
}
struct ListNode
* addTwoNumbers(struct ListNode
* l1
, struct ListNode
* l2
){
struct ListNode
*pa
= l1
;
struct ListNode
*pb
= l2
;
while(pa
->next
!=NULL && pb
->next
!=NULL){
pa
= pa
->next
;
pb
= pb
->next
;
}
if(pa
->next
!=NULL){
while(pa
->next
!=NULL){
struct ListNode
*p
;
p
= (struct ListNode
*)malloc(sizeof(struct ListNode
));
p
->val
= 0;
p
->next
= l2
;
l2
= p
;
pa
= pa
->next
;
}
}
else if(pb
->next
!=NULL){
while(pb
->next
!=NULL){
struct ListNode
*p
;
p
= (struct ListNode
*)malloc(sizeof(struct ListNode
));
p
->val
= 0;
p
->next
= l1
;
l1
= p
;
pb
= pb
->next
;
}
}
int *count
= (int *)malloc(sizeof(int));
*count
= 0;
add(l1
, l2
, count
);
if(*count
==1){
struct ListNode
*p
;
p
= (struct ListNode
*)malloc(sizeof(struct ListNode
));
p
->val
= 1;
p
->next
= l1
;
l1
= p
;
}
return l1
;
}
转载请注明原文地址: https://win8.8miu.com/read-48933.html