code: def add_two_numbers(l1, l2):
      start = ListNode(None)
      # use the same linked list as result so the Space complexity will be O(1)
      start.next = l1
      pointer = start
      transfer = 0
  
      while (l1 is not None) or (l2 is not None) or (transfer != 0):
          v1 = 0
          if l1 is not None:
              v1 = l1.val
              l1 = l1.next
  
          v2 = 0
          if l2 is not None:
              v2 = l2.val
              l2 = l2.next
  
          total = transfer + v1 + v2
          transfer = total // 10
  
          if l1 is None:
              # if the first list is shorter than the second, add new elements at the end
              pointer.next = ListNode(None)
          pointer = pointer.next
          pointer.val = total % 10
  
      return start.next
  
label_desc: Use image node_id 1 for calling a global function with example usage: add_two_numbers(l1, l2) and returns: start