Skip to main content

Add Two Numbers


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:

image

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:
  • The number of nodes in each linked list is in the range [1, 100].
  • 0 <= Node.val <= 9
  • It is guaranteed that the list represents a number that does not have leading zeros.

Try this Problem on your own or check similar problems:

  1. Add Two Numbers II
  2. Add Strings
Solution:
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode iter = dummy;
int carry = 0;

while (l1 != null || l2 != null || carry != 0) {
int val1 = (l1 != null) ? l1.val : 0;
int val2 = (l2 != null) ? l2.val : 0;
int sum = carry + val1 + val2;

carry = sum / 10;
iter.next = new ListNode(sum % 10);
iter = iter.next;

if (l1 != null)
l1 = l1.next;
if (l2 != null)
l2 = l2.next;
}

return dummy.next;
}

Time/Space Complexity:
  • Time Complexity: O(max(m,n)) where m and n are respectively lengths of list l1 and l2
  • Space Complexity: O(max(m,n))

Explanation:

As always when we're dealing with linked list problems it's useful to define dummy pointer and iterator pointing to the dummy head which we will use to iterate over the newly created list. We keep on adding nodes on the result linked list until we're out of elements from both linked lists given as inputs and carry (which we calculate each iteration, and which is 1 if the sum of digits is greater than 9). l1 and l2 help us to iterate over linked lists given as input. dummy.next will be pointing to the head of result so we return it as our solution. The time and space complexity are proportional to the number of nodes we have in the larger list (since we have or statement in the loop).