Javascript Program To Add Two Numbers Represented By Linked Lists- Set 1
Last Updated :
20 Dec, 2021
Given two numbers represented by two lists, write a function that returns the sum list. The sum list is a list representation of the addition of two input numbers.
Example:
Input:Â
List1: 5->6->3 // represents number 563Â
List2: 8->4->2 // represents number 842Â
Output:Â
Resultant list: 1->4->0->5 // represents number 1405Â
Explanation: 563 + 842 = 1405
Input:Â
List1: 7->5->9->4->6 // represents number 75946
List2: 8->4 // represents number 84
Output:Â
Resultant list: 7->6->0->3->0// represents number 76030
Explanation: 75946+84=76030
Approach: Traverse both lists and One by one pick nodes of both lists and add the values. If the sum is more than 10 then make carry as 1 and reduce sum. If one list has more elements than the other then consider the remaining values of this list as 0.Â
The steps are:Â
- Traverse the two linked lists from start to end
- Add the two digits each from respective linked lists.
- If one of the lists has reached the end then take 0 as its digit.
- Continue it until both the end of the lists.
- If the sum of two digits is greater than 9 then set carry as 1 and the current digit as sum % 10
Below is the implementation of this approach.Â
Javascript
<script>
var head1, head2;
class Node
{
constructor(val)
{
this .data = val;
this .next = null ;
}
}
function addTwoLists(first, second)
{
var res = null ;
var prev = null ;
var temp = null ;
var carry = 0, sum;
while (first != null ||
second != null )
{
sum = carry + (first != null ? first.data : 0) +
(second != null ? second.data : 0);
carry = (sum >= 10) ? 1 : 0;
sum = sum % 10;
temp = new Node(sum);
if (res == null )
{
res = temp;
}
else
{
prev.next = temp;
}
prev = temp;
if (first != null )
{
first = first.next;
}
if (second != null )
{
second = second.next;
}
}
if (carry > 0)
{
temp.next = new Node(carry);
}
return res;
}
function printList(head)
{
while (head != null )
{
document.write(head.data + " " );
head = head.next;
}
document.write( "<br/>" );
}
head1 = new Node(7);
head1.next = new Node(5);
head1.next.next = new Node(9);
head1.next.next.next = new Node(4);
head1.next.next.next.next = new Node(6);
document.write( "First List is " );
printList(head1);
head2 = new Node(8);
head2.next = new Node(4);
document.write( "Second List is " );
printList(head2);
rs = addTwoLists(head1, head2);
document.write( "Resultant List is " );
printList(rs);
</script>
|
Output:
First List is 7 5 9 4 6
Second List is 8 4
Resultant list is 5 0 0 5 6
Complexity Analysis:Â
- Time Complexity: O(m + n), where m and n are numbers of nodes in first and second lists respectively.Â
The lists need to be traversed only once.
- Space Complexity: O(m + n).Â
A temporary linked list is needed to store the output number
Related Article: Add two numbers represented by linked lists | Set 2
Please refer complete article on Add two numbers represented by linked lists | Set 1 for more details!
Share your thoughts in the comments
Please Login to comment...