Skip to content

Commit 5b3df15

Browse files
author
lewis617
committed
Add addTwoNumbers2
1 parent f139e93 commit 5b3df15

File tree

2 files changed

+94
-0
lines changed

2 files changed

+94
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var addTwoNumbers = require('../addTwoNumbers2');
2+
3+
test('addTwoNumbers', function () {
4+
var getLinkedList = function () {
5+
var i = 0,
6+
linkedList,
7+
current;
8+
9+
while (typeof arguments[i] !== 'undefined') {
10+
if (i === 0) {
11+
linkedList = { val: arguments[i], next: null };
12+
current = linkedList;
13+
} else {
14+
current.next = { val: arguments[i], next: null };
15+
current = current.next;
16+
}
17+
i++;
18+
}
19+
return linkedList;
20+
};
21+
22+
expect(addTwoNumbers(getLinkedList(7, 2, 4, 3), getLinkedList(5, 6, 4))).toEqual(getLinkedList(7, 8, 0, 7));
23+
expect(addTwoNumbers(getLinkedList(7), getLinkedList(5))).toEqual(getLinkedList(1, 2));
24+
});

LeetCode/addTwoNumbers2.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
function ListNode(val) {
2+
this.val = val;
3+
this.next = null;
4+
}
5+
6+
/**
7+
* Definition for singly-linked list.
8+
* function ListNode(val) {
9+
* this.val = val;
10+
* this.next = null;
11+
* }
12+
*/
13+
/**
14+
* @param {ListNode} l1
15+
* @param {ListNode} l2
16+
* @return {ListNode}
17+
*/
18+
var addTwoNumbers = function (l1, l2) {
19+
var c1 = l1,
20+
c2 = l2,
21+
l3, c3,
22+
s1 = [],
23+
s2 = [],
24+
s3 = [],
25+
carry = 0;
26+
27+
while (c1 || c2) {
28+
if (c1) {
29+
s1.push(c1.val);
30+
c1 = c1.next;
31+
}
32+
33+
if (c2) {
34+
s2.push(c2.val);
35+
c2 = c2.next;
36+
}
37+
}
38+
39+
while (s1.length || s2.length || carry) {
40+
var v1 = 0,
41+
v2 = 0;
42+
43+
if (s1.length) {
44+
v1 = s1.pop();
45+
}
46+
47+
if (s2.length) {
48+
v2 = s2.pop();
49+
}
50+
51+
var sum = v1 + v2 + carry;
52+
carry = Math.floor(sum / 10);
53+
54+
s3.push(sum % 10);
55+
}
56+
57+
while (s3.length) {
58+
var val = s3.pop();
59+
if (!c3) {
60+
l3 = new ListNode(val);
61+
c3 = l3;
62+
} else {
63+
c3.next = new ListNode(val);
64+
c3 = c3.next;
65+
}
66+
}
67+
return l3;
68+
};
69+
70+
module.exports = addTwoNumbers;

0 commit comments

Comments
 (0)