/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode* head1 = (struct ListNode*)malloc(sizeof(struct ListNode));
head1->next = NULL;
struct ListNode* head2 = (struct ListNode*)malloc(sizeof(struct ListNode));
head2->next = NULL;
struct ListNode* p, *q, *p2, *q2;
p = l1;
p2 = l1->next;
q = l2;
q2 = l2->next;
// 链表翻转
while(p != NULL) {
p->next = head1->next;
head1->next = p;
p = p2;
if(p2 == NULL) {
break;
}
p2 = p2->next;
}
while(q != NULL) {
q->next = head2->next;
head2->next = q;
q = q2;
if(q2 == NULL) {
break;
}
q2 = q2->next;
}
p = head1->next;
q = head2->next;
head1->next = NULL;
int c = 0;
while(p && q) {
struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
s->next = NULL;
int sum = p->val + q->val + c;
c = sum / 10;
s->val = sum % 10;
s->next = head1->next;
head1->next = s;
p = p->next;
q = q->next;
}
while(p != NULL) {
struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
s->next = NULL;
int sum = p->val + c;
c = sum / 10;
s->val = sum % 10;
s->next = head1->next;
head1->next = s;
p = p->next;
}
while(q != NULL) {
struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
s->next = NULL;
int sum = q->val + c;
c = sum / 10;
s->val = sum % 10;
s->next = head1->next;
head1->next = s;
q = q->next;
}
if(c) {
struct ListNode* s = (struct ListNode*)malloc(sizeof(struct ListNode));
s->next = NULL;
s->val = c;
s->next = head1->next;
head1->next = s;
}
return head1->next;
}
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!