It is often useful when implementing linked lists, trees, or other linked data structures to separate the implementation into an encapsulating object (LinkedList, Tree, etc.) and a node object (LinkedListNode, TreeNode, etc.), which allows one to implement methods outside of the actual nodes in question. A problem with popping from the node is that the popped node becomes invalid. Encapsulating the nodes in some larger datastructure allows that datastructure to perform the pop externally, removing the old node.
Another thing to consider is how pop will behave if there are no items left to pop. Should it throw an exception? Should it simply result in undefined behavior?
In a typical linked list, the encapsulating class typically maintains a pointer to the first element, an integer count of the number of elements, and optionally a pointer to the last element (for constant time insertion to the end of the list). For implementing a stack, you only need a single pointer to the front of the list.
Local variables are destructed automatically; however, it is your pointer that is a local variable, not the item to which it is pointing. The item pointed to by your pointer will not be deallocated without an explicit delete.
In your pop code, you are actually removing one too many items. It should be:
int result = head->nodeNum; // extract the result
LinkNode* tmp = head; // save this so we can delete it
head = head->next; // move the head forward to the next item
delete tmp; // deallocate previous head
return result;
Also, don't forget to check that head is non-null before attempting to pop.