Reputation: 51
i used to use python to do it and i don't know how to defined a ListNode class by Crystal, what i do is just for the second problem in Leetcode website which is Add Two Number. i have tried in this way but i got undefined method 'next' for ListNode error message
class ListNode
def initialize(x : Int32)
@val = x
@next = Nil
end
end
def addTwoNumbers(l1 : ListNode, l2 : ListNode)
divide_value = 0
first = l1
second = l2
is2 = 0
while True
sum = l1.val + l2.val + divide_value
residual_value = sum % 10
l1.val = residual_value
l2.val = residual_value
divide_value = sum / 10
if l1.next and l2.next
l1 = l1.next
l2 = l2.next
elsif !l1.next and l2.next
l1.val = 0
l2 = l2.next
is2 = 1
elsif l1.next and !l2.next
l2.val = 0
l1 = l1.next
else
if is2
if divide_value != 0
l2.next = ListNode.new divide_value
return second
end
return second
else
if divide_value != 0
l1.next = ListNode.new divide_value
return first
end
return first
end
end
end
end
l1 = ListNode.new 1
l2 = ListNode.new 9
l2 = l2.next
l2 = ListNode.new 9
result = addTwoNumbers(l1,l2)
while result
puts(result.val)
result = result.next
end
can anyone help me?
Upvotes: 0
Views: 97
Reputation: 10107
You need to create getter and setter method for instance variables, in order to access them.
https://crystal-lang.org/reference/syntax_and_semantics/methods_and_instance_variables.html
In your code, just add property
:
class ListNode
property val
property next_node # avoiding `next`. It is a reserved keyword.
def initialize(x : Int32)
@val = x
@next_node = Nil
end
end
l2 = ListNode.new 9
l2 = l2.next_node # ok now
Upvotes: 3