1
+ /**
2
+ * Definition for singly-linked list.
3
+ * type ListNode struct {
4
+ * Val int
5
+ * Next *ListNode
6
+ * }
7
+ *
8
+ * Report by leetcode.com
9
+ * Runtime: 12 ms, Memory Usage: 5 MB
10
+ */
11
+ func addTwoNumbers (l1 * ListNode , l2 * ListNode ) * ListNode {
12
+ head := & ListNode {}
13
+ currentNode1 := l1
14
+ currentNode2 := l2
15
+ currentHead := head
16
+ sum := 0
17
+ nextSum := 0
18
+
19
+ for true {
20
+ if currentNode1 != nil || currentNode2 != nil {
21
+ if currentNode1 == nil {
22
+ sum = nextSum + currentNode2 .Val
23
+ nextSum = sum / 10
24
+ currentNode2 = currentNode2 .Next
25
+ } else if currentNode2 == nil {
26
+ sum = nextSum + currentNode1 .Val
27
+ nextSum = sum / 10
28
+ currentNode1 = currentNode1 .Next
29
+ } else {
30
+ sum = nextSum + currentNode1 .Val + currentNode2 .Val
31
+ nextSum = sum / 10
32
+ currentNode1 = currentNode1 .Next
33
+ currentNode2 = currentNode2 .Next
34
+ }
35
+ currentHead .Val = sum % 10
36
+ // If there are elements present in the nodes then
37
+ // make a new node for future addition otherwise we
38
+ // will get unnecessary (0 --> <nil>) node in the end.
39
+ if currentNode1 != nil || currentNode2 != nil {
40
+ currentHead .Next = & ListNode {}
41
+ currentHead = currentHead .Next
42
+ } else if nextSum != 0 {
43
+ // If nextSum is not 0 this means that there was some carry value
44
+ // left in it which should be further.
45
+ currentHead .Next = & ListNode {nextSum , nil }
46
+ }
47
+ } else {
48
+ break
49
+ }
50
+ }
51
+
52
+ return head
53
+ }
0 commit comments