class
GFG {
class
Node {
int
data;
Node left, right;
}
public
Node newNode(
int
data)
{
Node node =
new
Node();
node.data = data;
node.left = node.right =
null
;
return
node;
}
public
Node BToDLL(Node root)
{
Node curr = root;
Node head =
null
, tail =
null
;
while
(curr !=
null
) {
if
(curr.left ==
null
) {
if
(head ==
null
) {
head = curr;
tail = curr;
}
else
{
tail.right = curr;
tail = tail.right;
}
curr = curr.right;
}
else
{
Node pred = curr.left;
while
(pred.right !=
null
&& pred.right != curr) {
pred = pred.right;
}
if
(pred.right ==
null
) {
pred.right = curr;
curr = curr.left;
}
else
{
tail.right = curr;
tail = tail.right;
curr = curr.right;
}
}
}
curr = head;
Node prev =
null
;
while
(curr !=
null
) {
curr.left = prev;
prev = curr;
curr = curr.right;
}
return
head;
}
public
void
printList(Node head)
{
System.out.print(
"Actual order: "
);
while
(head !=
null
) {
System.out.print(head.data +
" "
);
head = head.right;
}
}
public
void
printReverseList(Node tail)
{
System.out.print(
"\nReverse Order: "
);
while
(tail !=
null
) {
System.out.print(tail.data +
" "
);
tail = tail.left;
}
}
public
static
void
main(String[] args)
{
GFG list =
new
GFG();
Node root = list.newNode(
10
);
root.left = list.newNode(
20
);
root.right = list.newNode(
30
);
root.left.left = list.newNode(
40
);
root.left.right = list.newNode(
60
);
Node head = list.BToDLL(root);
list.printList(head);
Node tail = head;
while
(tail !=
null
&& tail.right !=
null
) {
tail = tail.right;
}
list.printReverseList(tail);
}
}