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);
}
}