给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
执行用时 : 16 ms, 在Add Two Numbers的C提交中击败了99.75% 的用户 内存消耗 : 8.9 MB, 在Add Two Numbers的C提交中击败了94.30% 的用户
代码如下:
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode *p1 = l1,*p2 = l2,L,temp,head; L = (struct ListNode)malloc(sizeof(struct ListNode)); L->next = NULL; head = L; int num1,num2; int t = 0,sum; while(p1 != NULL || p2 != NULL) { temp = (struct ListNode)malloc(sizeof(struct ListNode)); temp->next = NULL; if(p1 == NULL) { num1 = 0; } else { num1 = p1->val; } if(p2 == NULL) { num2 = 0; } else { num2 = p2->val; } sum = num1 + num2 + t; t = sum / 10; temp->val = sum % 10; L->next = temp; L = L->next; if(p1 != NULL) p1 = p1->next; if(p2 != NULL) p2 = p2->next; } if(t > 0) { temp = (struct ListNode)malloc(sizeof(struct ListNode)); temp->next = NULL; temp->val = t; L->next = temp; L = L->next; } return head->next; }