Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 41dcee7

Browse files
authored
Merge pull request #2 from adamMRamos/scala/2-add-two-numbers
scala: leetcode solution for 2. add two numbers
2 parents ca5ca10 + 8448007 commit 41dcee7

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

scala/2-Add-Two-Numbers.scala

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* class ListNode(_x: Int = 0, _next: ListNode = null) {
4+
* var next: ListNode = _next
5+
* var x: Int = _x
6+
* }
7+
*/
8+
object Solution {
9+
def addTwoNumbers(l1: ListNode, l2: ListNode): ListNode = {
10+
def nonNull(l: ListNode): Boolean = l != null
11+
def next(l: ListNode): ListNode = if (nonNull(l)) l.next else null
12+
def getX(l: ListNode): Int = if (nonNull(l)) l.x else 0
13+
def sumX(l1: ListNode, l2: ListNode, carry: Int): (ListNode, Int) = {
14+
val sum = getX(l1) + getX(l2) + carry
15+
new ListNode(sum % 10) -> sum / 10
16+
}
17+
18+
var carry = 0
19+
val (sum, newCarry) = sumX(l1, l2, carry)
20+
carry = newCarry
21+
22+
var nextDigit = sum
23+
var next1 = next(l1)
24+
var next2 = next(l2)
25+
26+
while (nonNull(next1) || nonNull(next2)) {
27+
val (sum, newCarry) = sumX(next1, next2, carry)
28+
29+
nextDigit.next = sum
30+
nextDigit = nextDigit.next
31+
32+
carry = newCarry
33+
next1 = next(next1)
34+
next2 = next(next2)
35+
}
36+
37+
if (carry > 0)
38+
nextDigit.next = new ListNode(carry)
39+
40+
sum
41+
}
42+
}

0 commit comments

Comments
 (0)