When you allocate the node, use the size of node, not of the pointer
helper = malloc( sizeof( struct node ) );
it is often better not to typedef pointers as it makes them difficult to see in various contexts, instead typedef the struct node
typedef struct node
{
Item data;
struct node* next;
} node;
then its clear when it is a node* and when not.