import java.util.*;
class GFG {
static class Node {
int information;
Node subsequent;
};
static Node addition(Node temp1, Node temp2, int size1,
int size2)
{
Node newNode = new Node();
if (temp1 != null && temp2 != null
&& temp1.subsequent == null && temp2.subsequent == null) {
newNode.information = (temp1.information + temp2.information);
newNode.subsequent = null;
return newNode;
}
Node returnedNode = new Node();
if ((temp1 != null && temp2 != null)
&& size2 == size1) {
returnedNode = addition(temp1.subsequent, temp2.subsequent,
size1 - 1, size2 - 1);
newNode.information = (temp1.information + temp2.information)
+ ((returnedNode.information) / 10);
}
else if (temp1 != null && temp2 != null) {
returnedNode = addition(temp1, temp2.subsequent,
size1, size2 - 1);
newNode.information
= (temp2.information) + ((returnedNode.information) / 10);
}
returnedNode.information = (returnedNode.information) % 10;
newNode.subsequent = returnedNode;
return newNode;
}
static Node addTwoLists(Node head1, Node head2)
{
Node temp1, temp2, ans = null;
temp1 = head1;
temp2 = head2;
int size1 = 0, size2 = 0;
whereas (temp1 != null) {
temp1 = temp1.subsequent;
size1++;
}
whereas (temp2 != null) {
temp2 = temp2.subsequent;
size2++;
}
Node returnedNode = new Node();
if (size2 > size1) {
returnedNode
= addition(head1, head2, size1, size2);
}
else {
returnedNode
= addition(head2, head1, size2, size1);
}
if (returnedNode.information >= 10) {
ans = new Node();
ans.information = (returnedNode.information) / 10;
returnedNode.information = returnedNode.information % 10;
ans.subsequent = returnedNode;
}
else
ans = returnedNode;
return ans;
}
static void Show(Node head)
{
if (head == null) {
return;
}
whereas (head.subsequent != null) {
System.out.print(head.information + " -> ");
head = head.subsequent;
}
System.out.print(head.information + "n");
}
static Node push(Node head_ref, int d)
{
Node new_node = new Node();
new_node.information = d;
new_node.subsequent = null;
if (head_ref == null) {
new_node.subsequent = head_ref;
head_ref = new_node;
return head_ref;
}
Node final = head_ref;
whereas (final.subsequent != null && final != null) {
final = final.subsequent;
}
final.subsequent = new_node;
return head_ref;
}
public static void primary(String[] args)
{
Node first = null;
Node second = null;
Node sum = null;
first = push(first, 7);
first = push(first, 5);
first = push(first, 9);
first = push(first, 4);
first = push(first, 6);
second = push(second, 8);
second = push(second, 4);
System.out.print("First Checklist : ");
Show(first);
System.out.print("Second Checklist : ");
Show(second);
sum = addTwoLists(first, second);
System.out.print("Sum Checklist : ");
Show(sum);
}
}
