Skip to content
50 changes: 50 additions & 0 deletions solution/0000-0099/0002.Add Two Numbers/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,56 @@ proc addTwoNumbers(l1: var SinglyLinkedList, l2: var SinglyLinkedList): SinglyLi
result = aggregate
```

#### C

```c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/

struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)
{
struct ListNode *dummy = (struct ListNode *)malloc(sizeof(struct ListNode));
dummy->val = 0;
dummy->next = NULL;
struct ListNode *curr = dummy;
int carry = 0;

while (l1 != NULL || l2 != NULL || carry != 0)
{
int sum = carry;
if (l1 != NULL)
{
sum += l1->val;
l1 = l1->next;
}
if (l2 != NULL)
{
sum += l2->val;
l2 = l2->next;
}

carry = sum / 10;
int val = sum % 10;

struct ListNode *newNode = (struct ListNode *)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
curr->next = newNode;
curr = curr->next;
}

struct ListNode *result = dummy->next;
free(dummy);
return result;
}

```

<!-- tabs:end -->

<!-- solution:end -->
Expand Down
49 changes: 49 additions & 0 deletions solution/0000-0099/0002.Add Two Numbers/README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,55 @@ proc addTwoNumbers(l1: var SinglyLinkedList, l2: var SinglyLinkedList): SinglyLi
result = aggregate
```

#### C

```c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/

struct ListNode *addTwoNumbers(struct ListNode *l1, struct ListNode *l2)
{
struct ListNode *dummy = (struct ListNode *)malloc(sizeof(struct ListNode));
dummy->val = 0;
dummy->next = NULL;
struct ListNode *curr = dummy;
int carry = 0;

while (l1 != NULL || l2 != NULL || carry != 0)
{
int sum = carry;
if (l1 != NULL)
{
sum += l1->val;
l1 = l1->next;
}
if (l2 != NULL)
{
sum += l2->val;
l2 = l2->next;
}

carry = sum / 10;
int val = sum % 10;

struct ListNode *newNode = (struct ListNode *)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
curr->next = newNode;
curr = curr->next;
}

struct ListNode *result = dummy->next;
free(dummy);
return result;
}
```

<!-- tabs:end -->

<!-- solution:end -->
Expand Down
40 changes: 40 additions & 0 deletions solution/0000-0099/0002.Add Two Numbers/Solution.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode* dummy = (struct ListNode*) malloc(sizeof(struct ListNode));
dummy->val = 0;
dummy->next = NULL;
struct ListNode* curr = dummy;
int carry = 0;

while (l1 != NULL || l2 != NULL || carry != 0) {
int sum = carry;
if (l1 != NULL) {
sum += l1->val;
l1 = l1->next;
}
if (l2 != NULL) {
sum += l2->val;
l2 = l2->next;
}

carry = sum / 10;
int val = sum % 10;

struct ListNode* newNode = (struct ListNode*) malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
curr->next = newNode;
curr = curr->next;
}

struct ListNode* result = dummy->next;
free(dummy);
return result;
}