0%

2. Add Two Numbers

O(max(m, n)) time

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
tail = dummy = ListNode(-1)
c = 0
while l1 or l2 or c:
a = l1.val if l1 else 0
b = l2.val if l2 else 0
l1 = l1.next if l1 else l1
l2 = l2.next if l2 else l2
c, s = divmod(a + b + c, 10)
tail.next = ListNode(s)
tail = tail.next
return dummy.next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
tail = dummy = ListNode(-1)
c = 0
while l1 or l2 or c != 0:
a = l1.val if l1 else 0
b = l2.val if l2 else 0
l1 = l1.next if l1 else l1
l2 = l2.next if l2 else l2
s = a + b + c
tail.next = ListNode(s % 10)
tail = tail.next
c = s // 10
return dummy.next
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int c = 0;
ListNode dummy_head(0), *tail = &dummy_head;
while (l1 || l2 || c > 0) {
int a = l1 ? l1->val : 0;
int b = l2 ? l2->val : 0;
l1 = l1 ? l1->next : l1;
l2 = l2 ? l2->next : l2;
int s = a + b + c;
tail->next = new ListNode(s % 10);
tail = tail->next;
c = s / 10;
}
return dummy_head.next;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int a = 0, b = 0, c = 0;
ListNode *n1 = l1, *n2 = l2, dummy_head(-1), *t = &dummy_head;
while (n1 || n2 || c > 0) {
a = n1 ? n1->val : 0;
b = n2 ? n2->val : 0;
int s = a + b + c;
t->next = new ListNode(s % 10);
t = t->next;
c = s / 10;
n1 = n1 ? n1->next : n1;
n2 = n2 ? n2->next : n2;
}
return dummy_head.next;
}
};