You have two numbers represented by a linked list, where each node contains a single-digit. The digits are stored in reverse order, such that the 1's digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked list. Example: Input : ( 3->1->5 ) + ( 5->9->2 ) Output : (8->0->8)
File1: LinkedListNode.java
---------------------------------------------------------------------------------------------------------
package org.developersbrain.solutions;
public class LinkedListNode {
int data;
LinkedListNode nextNode;
public LinkedListNode(int data){
this.data = data;
nextNode = null;
}
public void add(int data){
LinkedListNode newNode=new LinkedListNode(data);
LinkedListNode next=this;
while(next.nextNode!=null){
next =next.nextNode;
}
next.nextNode=newNode;
}
public void traverse(){
LinkedListNode next=this;
while(next != null){
System.out.print(next.data+"->");
next=next.nextNode;
};
System.out.print("List Values End");
System.out.println();
}
/*Algorithm implementation part*/
static int reverse(int num){
int i=0;
while(num>0){
i=(i*10)+(num%10);
num=num/10;
}
return i;
}
public static int returnNumber(LinkedListNode list){
int sumOfNumber=0;
while(list!=null){
sumOfNumber=(sumOfNumber*10)+list.data;
list=list.nextNode;
}
return reverse(sumOfNumber);
}
public static LinkedListNode returnList(int num){
LinkedListNode node=null;
int givenNumber=num;
int dataV=0;
while(givenNumber > 0){
dataV = givenNumber%10;
if(node==null){
node=new LinkedListNode(dataV);
}
else{
node.add(dataV);
}
givenNumber=givenNumber/10;
}
return node;
}
/*Algortihm implementation part*/
}
File2: MainClass.java
------------------------------------------------------------------------------------
package org.developersbrain.solutions;
public class MainClass {
public static LinkedListNode sumOfNodes(LinkedListNode ln1,LinkedListNode ln2){
int sum=0;
sum=LinkedListNode.returnNumber(ln1)+LinkedListNode.returnNumber(ln2);
return LinkedListNode.returnList(sum);
}
public static void main(String[] args){
LinkedListNode lnode1=new LinkedListNode(3);
lnode1.add(1);
lnode1.add(5);
System.out.println("List 1");
System.out.println("+++++++++++++++++++++++++++");
lnode1.traverse();
LinkedListNode lnode2=new LinkedListNode(5);
lnode2.add(9);
lnode2.add(2);
System.out.println("List 2");
System.out.println("+++++++++++++++++++++++++++");
lnode2.traverse();
LinkedListNode output=sumOfNodes(lnode1,lnode2);
System.out.println();
System.out.println("List 1 + List 2=>");
System.out.println("===================");
output.traverse();
}
}
Output:
-----------------------------------------------------------------------------------------------
List 1
+++++++++++++++++++++++++++
3->1->5->List Values End
List 2
+++++++++++++++++++++++++++
5->9->2->List Values End
List 1 + List 2=>
===================
8->0->8->List Values End
Explanation:
----------------------------------------------------
Break down the requirement:
Facts:
Linked list contains single digits
Idea:
Form complete set of numbers using Linked List
//ReturnNumber Function takes LinkedList as input and returns Number
//------------------------------------------------------------------
Function ReturnNumber ( Node LinkedListNode)
int num=0;
While(LinkedListNode != Null)
num=(num*10)+LinkedListNode.singleDigit;
LinkedListNode=LinkedListNode.nextNode;
Return num;
Do the same for the list 2 also
Now you get two Numbers num1 , num2
Simply add num1+num2 => Sum
Write a new linked list digit by digits for the "Sum"
Example:
Num1 = ReturnNumber(List1); //513 - Reverse of List 1 ( 3->1->5 )
Num2 = ReturnNumber(List2); //295 - Reverse of List 2 ( 5->9->2 )
Sum = Num1+Num2;//808
---------------------------------------------------------------------------------------------------------
package org.developersbrain.solutions;
public class LinkedListNode {
int data;
LinkedListNode nextNode;
public LinkedListNode(int data){
this.data = data;
nextNode = null;
}
public void add(int data){
LinkedListNode newNode=new LinkedListNode(data);
LinkedListNode next=this;
while(next.nextNode!=null){
next =next.nextNode;
}
next.nextNode=newNode;
}
public void traverse(){
LinkedListNode next=this;
while(next != null){
System.out.print(next.data+"->");
next=next.nextNode;
};
System.out.print("List Values End");
System.out.println();
}
/*Algorithm implementation part*/
static int reverse(int num){
int i=0;
while(num>0){
i=(i*10)+(num%10);
num=num/10;
}
return i;
}
public static int returnNumber(LinkedListNode list){
int sumOfNumber=0;
while(list!=null){
sumOfNumber=(sumOfNumber*10)+list.data;
list=list.nextNode;
}
return reverse(sumOfNumber);
}
public static LinkedListNode returnList(int num){
LinkedListNode node=null;
int givenNumber=num;
int dataV=0;
while(givenNumber > 0){
dataV = givenNumber%10;
if(node==null){
node=new LinkedListNode(dataV);
}
else{
node.add(dataV);
}
givenNumber=givenNumber/10;
}
return node;
}
/*Algortihm implementation part*/
}
File2: MainClass.java
------------------------------------------------------------------------------------
package org.developersbrain.solutions;
public class MainClass {
public static LinkedListNode sumOfNodes(LinkedListNode ln1,LinkedListNode ln2){
int sum=0;
sum=LinkedListNode.returnNumber(ln1)+LinkedListNode.returnNumber(ln2);
return LinkedListNode.returnList(sum);
}
public static void main(String[] args){
LinkedListNode lnode1=new LinkedListNode(3);
lnode1.add(1);
lnode1.add(5);
System.out.println("List 1");
System.out.println("+++++++++++++++++++++++++++");
lnode1.traverse();
LinkedListNode lnode2=new LinkedListNode(5);
lnode2.add(9);
lnode2.add(2);
System.out.println("List 2");
System.out.println("+++++++++++++++++++++++++++");
lnode2.traverse();
LinkedListNode output=sumOfNodes(lnode1,lnode2);
System.out.println();
System.out.println("List 1 + List 2=>");
System.out.println("===================");
output.traverse();
}
}
Output:
-----------------------------------------------------------------------------------------------
List 1
+++++++++++++++++++++++++++
3->1->5->List Values End
List 2
+++++++++++++++++++++++++++
5->9->2->List Values End
List 1 + List 2=>
===================
8->0->8->List Values End
Explanation:
----------------------------------------------------
Break down the requirement:
Facts:
Linked list contains single digits
Idea:
Form complete set of numbers using Linked List
//ReturnNumber Function takes LinkedList as input and returns Number
//------------------------------------------------------------------
Function ReturnNumber ( Node LinkedListNode)
int num=0;
While(LinkedListNode != Null)
num=(num*10)+LinkedListNode.singleDigit;
LinkedListNode=LinkedListNode.nextNode;
Return num;
Do the same for the list 2 also
Now you get two Numbers num1 , num2
Simply add num1+num2 => Sum
Write a new linked list digit by digits for the "Sum"
Example:
Num1 = ReturnNumber(List1); //513 - Reverse of List 1 ( 3->1->5 )
Num2 = ReturnNumber(List2); //295 - Reverse of List 2 ( 5->9->2 )
Sum = Num1+Num2;//808
Comments
Post a Comment