Add Two Numbers in Linked List (In reverse Order)
💻 coding

Add Two Numbers in Linked List (In reverse Order)

2 min read 310 words
2 min read
ShareWhatsAppPost on X
  • 1The problem involves adding two non-negative integers represented as linked lists in reverse order.
  • 2The solution uses recursion to calculate the sum while managing carry values.
  • 3The time and space complexity of the algorithm is O(n), where n is the length of the longer linked list.

AI-generated summary · May not capture all nuances

Key Insight
AskGif

"The problem involves adding two non-negative integers represented as linked lists in reverse order."

Add Two Numbers in Linked List (In reverse Order)

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 them as a linked list.

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

Example:

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

Solution:

using System;
using System.Collections.Generic;
using System.Text;

namespace LeetCode.Medium
{ 
 class AddTwoNumbersReverseOrderSolution
 {
 public void execute()
 {
 var l1 = new ListNode(2); 
 l1.next = new ListNode(4);
 l1.next.next = new ListNode(3);

 var l2 = new ListNode(5);
 l2.next = new ListNode(6);
 l2.next.next = new ListNode(4);

 AddTwoNumbers(l1, l2);
 }
 public ListNode AddTwoNumbers(ListNode l1, ListNode l2)
 { 
 var res = Calculate(l1,l2);
 return res;
 }

 private ListNode Calculate(ListNode l1, ListNode l2)
 {
 int carry=0;
 int sum = l1.val + l2.val + carry;
 carry = sum / 10;
 var rootNode = new ListNode(sum % 10); 
 rootNode.next = CalculateRecursively(l1.next, l2.next, carry); 
 return rootNode;
 }

 private ListNode CalculateRecursively(ListNode l1, ListNode l2, int carry)
 {
 if (l1 == null && l2 == null)
 { 
 if(carry != 0)
 {
 return new ListNode(carry);
 }
 return null;
 }

 int sum = 0;
 var currentNode = new ListNode(0);
 if(l1 == null)
 {
 sum = 0 + l2.val + carry;
 carry = sum / 10;
 currentNode = new ListNode(sum % 10);
 currentNode.next = CalculateRecursively(l1, l2.next, carry);
 }
 else if(l2 == null)
 {
 sum = l1.val + 0 + carry;
 carry = sum / 10;
 currentNode = new ListNode(sum % 10);
 currentNode.next = CalculateRecursively(l1.next, l2, carry);
 }
 else
 {
 sum = l1.val + l2.val + carry;
 carry = sum / 10;
 currentNode = new ListNode(sum % 10);
 currentNode.next = CalculateRecursively(l1.next, l2.next, carry);
 }
 
 return currentNode;
 }
 }
}

Time Complexity: O(n)

Space Complexity: O(n)

https://raw.githubusercontent.com/sumitc91/coding/master/Coding/LeetCode/Medium/AddTwoNumbersReverseOrderSolution.cshttps://raw.githubusercontent.com/sumitc91/coding/master/Coding/LeetCode/Medium/AddTwoNumbersReverseOrderSolution.cs

Enjoyed this article?

Share it with someone who'd find it useful.

ShareWhatsAppPost on X

AskGif

Published on 18 April 2020 · 2 min read · 310 words

Part of AskGif Blog · coding

You might also like