This content originally appeared on DEV Community and was authored by Giuseppe
Time Complexity: O(n)
Space Complexity: O(1)
Total space (including result list): O(n)
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode();
ListNode current = dummy;
int carry = 0;
// Continue looping as long as there’s at least one more digit to process or a carry to handle.
while (l1 != null || l2 != null || carry != 0) {
// extract the values (if node exists, else 0)
int val1 = (l1 != null) ? l1.val : 0;
int val2 = (l2 != null) ? l2.val : 0;
// compute total sum with carry
int sum = val1 + val2 + carry;
// determine next carry and current digit
carry = sum / 10;
int digit = sum % 10;
// create new node with the digit and attach
current.next = new ListNode(digit);
current = current.next;
// move input pointers forward
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
return dummy.next;
}
}
This content originally appeared on DEV Community and was authored by Giuseppe