diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index 6daebc77..ffdcbf17 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '7.0.9' + s.version = '7.0.9.1' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[README.md] s.executable = 'leetcode-ruby' diff --git a/lib/medium/445_add_two_numbers_ii.rb b/lib/medium/445_add_two_numbers_ii.rb index 9a38fa24..f022c171 100644 --- a/lib/medium/445_add_two_numbers_ii.rb +++ b/lib/medium/445_add_two_numbers_ii.rb @@ -5,26 +5,42 @@ # @param {ListNode} l2 # @return {ListNode} def add_two_numbers445(l1, l2) - first_num = [] - while l1 - first_num << l1.val - l1 = l1.next - end + r1 = reverse_list_node(l1) + r2 = reverse_list_node(l2) + sum = ::ListNode.new(0) + p = sum + carry = 0 + while r1 || r2 + a = r1.nil? ? 0 : r1.val + b = r2.nil? ? 0 : r2.val + c = a + b + carry + + p.next = ::ListNode.new(c % 10) + p = p.next + carry = c / 10 - second_num = [] - while l2 - second_num << l2.val - l2 = l2.next + r1 = r1&.next + r2 = r2&.next end - sum = (first_num.join.to_i + second_num.join.to_i).to_s + p.next = ::ListNode.new(carry) unless carry.zero? + + reverse_list_node(sum.next) +end + +private - result = ::ListNode.new(0) - curr = result - sum.each_char do |c| - curr.next = ::ListNode.new(c.to_i) - curr = curr.next +# @param {ListNode} head +# @return {ListNode} +def reverse_list_node(head) + prev = nil + curr = head + while curr + nxt = curr.next + curr.next = prev + prev = curr + curr = nxt end - result.next + prev end