#!/usr/bin/env python # coding: utf-8 #

2. Add Two Numbers

#
# # #

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

# #

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

# #

 

#

Example 1:

# #
Input: l1 = [2,4,3], l2 = [5,6,4]
# Output: [7,0,8]
# Explanation: 342 + 465 = 807.
# 
#

 

#

Example 2:

# #
Input: l1 = [0], l2 = [0]
# Output: [0]
# 
# #

Example 3:

# #
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
# Output: [8,9,9,9,0,0,0,1]
# 
# #

 

#

Constraints:

# # # # #

 

# Source #
# In[1]: # Definition for singly-linked list. class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next #

Code

# In[2]: def add_two_numbers(l1, l2): """iterative approach.""" carry = 0 answer = curr_sol = ListNode(carry) while l1 or l2 or carry != 0: tmp = carry if l1: tmp += l1.val l1 = l1.next if l2: tmp += l2.val l2 = l2.next val = tmp % 10 carry = tmp // 10 curr_sol.next = ListNode(val) curr_sol = curr_sol.next return answer.next #
#

Follow up:

#

Solve it both recursively and iteratively.

# #

Code

# In[ ]: def add_two_numbers(l1, l2): """recursive approach.""" def helper(l1,l2,carry): if l1 or l2 or carry != 0: tmp = carry if l1: tmp += l1.val l1 = l1.next if l2: tmp += l2.val l2 = l2.next val = tmp % 10 carry = tmp // 10 answer = ListNode(val) answer.next = helper(l1, l2, carry) return answer return None return helper(l1,l2,0)