Singly Linked list implementation in C++
I see a number of things that may help you improve your code.

Prefer references to raw pointers

In modern C++, we tend not to use raw pointers very often.  In this case, It would probably be better to have two different classes, one would be a LinkedList class and the other would be a Node class.  That way, instead of starting with a pointer, you can start with an object.

Use objects

You have a Node structure and then separate functions that operate on Node data. With only a slight syntax change, you would have a real object instead of C-style code written in C++.  

Use whitespace to improve readability

Lines like this:

head=push_front(-21,head);


become much easier to read with a little bit of whitespace:

head = push_front(-21, head);


Use nullptr rather than NULL

Modern C++ uses nullptr rather than NULL.  See this answer for why and how it's useful.  

Use consistent naming

The code includes print() (lowercase) and Search() (uppercase).  It would be better for both functions to have similar case.  I tend to use capital letters to name clases or structs such a Node and then lowercase letters for functions such as print or search.

Match new with delete

If you allocate memory using new, you must also free it using delete or your program will leak memory.  This program leaks memory.  

Use more descriptive names

The code's DetectCircle function seems to return true if the list is circular.  Generally, it's good to name boolean functions so that their sense is unambiguous.  For example, I'd probably call it isCircular.

Omit return 0

If your program completes successfully, the return 0 at the end of main() will be generated automatically, so it's not needed in C++ programs.