#include // printf #include // NULL, EXIT_SUCCESS, malloc #include // assert (should normally only be used for testing) typedef struct node_st { void* element; struct node_st* next; } Node; Node* Push(Node* head, void* e); int main(int argc, char** argv) { char* hello = "Hi there!"; char* goodbye = "Bye bye."; Node* list = NULL; list = Push(list, (void*) hello); list = Push(list, (void*) goodbye); printf("payload is: '%s'\n", (char*) list->next->element); return EXIT_SUCCESS; } Node* Push(Node* head, void* e) { Node* n = (Node*) malloc(sizeof(Node)); assert(n != NULL); // crashes if false n->element = e; n->next = head; return n; }