class
GFG
{
static
class
Node
{
int
data;
Node next, prev;
};
static
Node getNode(
int
data)
{
Node newNode =
new
Node();
newNode.data = data;
return
newNode;
}
static
Node insertEnd(Node head, Node new_node)
{
if
(head ==
null
)
{
new_node.next = new_node.prev = new_node;
head = new_node;
return
head;
}
Node last = (head).prev;
new_node.next = head;
(head).prev = new_node;
new_node.prev = last;
last.next = new_node;
return
head;
}
static
Node reverse(Node head)
{
if
(head==
null
)
return
null
;
Node new_head =
null
;
Node last = head.prev;
Node curr = last, prev;
while
(curr.prev != last)
{
prev = curr.prev;
new_head=insertEnd(new_head, curr);
curr = prev;
}
new_head=insertEnd(new_head, curr);
return
new_head;
}
static
void
display(Node head)
{
if
(head==
null
)
return
;
Node temp = head;
System.out.print(
"Forward direction: "
);
while
(temp.next != head)
{
System.out.print( temp.data +
" "
);
temp = temp.next;
}
System.out.print( temp.data +
" "
);
Node last = head.prev;
temp = last;
System.out.print(
"\nBackward direction: "
);
while
(temp.prev != last)
{
System.out.print( temp.data +
" "
);
temp = temp.prev;
}
System.out.print( temp.data +
" "
);
}
public
static
void
main(String args[])
{
Node head =
null
;
head =insertEnd(head, getNode(
1
));
head =insertEnd(head, getNode(
2
));
head =insertEnd(head, getNode(
3
));
head =insertEnd(head, getNode(
4
));
head =insertEnd(head, getNode(
5
));
System.out.print(
"Current list:\n"
);
display(head);
head = reverse(head);
System.out.print(
"\n\nReversed list:\n"
);
display(head);
}
}