Basically, you have 4 independent problems, they are just all related to doubly linked lists. Solve them one by one.
your first problem is that this is not a doubly linked list:
struct node
{
int number;
node *next;
};
In a doubly linked list, you have pointer to
next node
and a pointer to
previous node.