LeetCode 两数相加2 C语言

it2022-05-05  64

思路 先把两个链表补成一样的长度,再用递归方法错误 注意函数里面用指针时也要提前在外面分配内存,不然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; }

最新回复(0)