DEV Community

Nucu Labs
Nucu Labs

Posted on

LeetCode: Add Two Numbers Python 3 iterative solution

Hello,

Here’s my solution for the add two numbers problem on LeetCode.

Example:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807. 
Enter fullscreen mode Exit fullscreen mode

When doing problems on websites such as LeetCode, I like to code in my own IDE, that's why you’ll see some additional helper functions besides the solution code.

# Definition for singly-linked list. class ListNode(object): def __init__(self, x): self.val = x self.next = None @staticmethod def make_list(arr): if len(arr) > 0: root = ListNode(arr[0]) root.next = ListNode.make_list(arr[1:]) return root else: return None @staticmethod def print_list(l): if not l: return print(l.val, end=" ") ListNode.print_list(l.next) class Solution(object): def _add_to_list(self, root, val): while True: if root.next is None: root.next = ListNode(val) break else: root = root.next def _compute(self, result, base=10): carry = result // base rest = result % base return carry, rest def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ root_node = None term_1 = l1 term_2 = l2 saved_carry = 0 while True: # end of expression ; add cary if any  if term_1 is None and term_2 is None: if saved_carry > 0: self._add_to_list(root_node, saved_carry) break # We haven't reached the end, we assume that whatever term is left is 0  if term_1 is None: term_1 = ListNode(0) if term_2 is None: term_2 = ListNode(0) # add the two terms  term_sum_carry, term_sum_no_carry = self._compute(term_1.val + term_2.val) # add sum to current carry  next_carry, total_with_carry = self._compute(term_sum_no_carry + saved_carry) # save carry  saved_carry = term_sum_carry + next_carry # save total  if not root_node: root_node = ListNode(total_with_carry) else: self._add_to_list(root_node, total_with_carry) # move on  term_1 = term_1.next term_2 = term_2.next return root_node if __name__ == '__main__': l1 = ListNode.make_list([9, 9]) l2 = ListNode.make_list([1]) solution = Solution() result = solution.addTwoNumbers(l1, l2) ListNode.print_list(result) print("Done") 
Enter fullscreen mode Exit fullscreen mode

My solution isn’t that great because of the _add_to_list function which iterates the root_node to append the next value. I have no idea how to optimize that right now.

Thanks for reading!

Top comments (0)