There is a caveat here, which requires us to use a double pointer for the head, otherwise, we will only update the local copy of head.
bool insertInFront(IntElement **head, int data){
IntElement *newElem = malloc(sizeof(IntElement));
if(!newElem) return false;
newElem->data = data:
newElem->next = *head;
*head = newElem;
return true;
}