【力扣 中等 C】2. 两数相加
目录
题目
解法一:迭代
解法二:递归
题目
待添加
解法一:迭代
struct ListNode* add(struct ListNode* head1, struct ListNode* head2)
{struct ListNode* virHead = malloc(sizeof(*virHead));struct ListNode* curNode = virHead;int carry = 0;struct ListNode* list1CurNode = head1;struct ListNode* list2CurNode = head2;while (list1CurNode || list2CurNode || carry){int val1 = list1CurNode ? list1CurNode->val : 0;int val2 = list2CurNode ? list2CurNode->val : 0;int sum = val1 + val2 + carry;carry = sum >= 10 ? 1 : 0;struct ListNode* newNode = malloc(sizeof(*newNode));newNode->val = sum % 10;newNode->next = NULL;curNode->next = newNode;curNode = newNode;list1CurNode = list1CurNode ? list1CurNode->next : list1CurNode;list2CurNode = list2CurNode ? list2CurNode->next : list2CurNode;}struct ListNode* retHead = virHead->next;free(virHead);return retHead;
}struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{return add(l1, l2);
}
解法二:递归
struct ListNode* add(struct ListNode* head1, struct ListNode* head2, int carry)
{if (!head1 && !head2 && !carry)return NULL;int val1 = head1 ? head1->val : 0;int val2 = head2 ? head2->val : 0;int sum = val1 + val2 + carry;struct ListNode* newNode = malloc(sizeof(*newNode));newNode->val = sum % 10;newNode->next = add(head1 ? head1->next : head1, head2 ? head2->next : head2, sum >= 10 ? 1 : 0);return newNode;
}struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{return add(l1, l2, 0);
}