Add Two Numbers II LeetCode solution in C++

1
/**
2
* Definition for singly-linked list.
3
* struct ListNode {
4
* int val;
5
* ListNode *next;
6
* ListNode() : val(0), next(nullptr) {}
7
* ListNode(int x) : val(x), next(nullptr) {}
8
* ListNode(int x, ListNode *next) : val(x), next(next) {}
9
* };
10
*/
11
class Solution {
12
public:
13
ListNode *reverse(ListNode *l1) {
14
if (l1 == NULL || l1->next == NULL) {
15
return l1;
16
}
17
ListNode *ans = reverse(l1->next);
18
l1->next->next = l1;
19
l1->next = NULL;
20
return ans;
21
}
22
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
23
ListNode *l11 = reverse(l1);
24
ListNode *l22 = reverse(l2);
25
ListNode *dummy = new ListNode(0);
26
ListNode *curr = dummy;
27
int carry = 0;
28
int sum = 0;
29
while (l11 || l22 || carry != 0) {
30
int x = l11 ? l11->val : 0;
31
int y = l22 ? l22->val : 0;
32
sum = x + y + carry;
33
carry = sum / 10;
34
curr->next = new ListNode(sum % 10);
35
curr = curr->next;
36
l11 = l11 ? l11->next : nullptr;
37
l22 = l22 ? l22->next : nullptr;
38
}
39
dummy = dummy->next;
40
dummy = reverse(dummy);
41
return dummy;
42
}
43
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0