Simple but (hopefully) safe C nodes for data structures
It's very misleading that destroy_node (singular) actually recursively frees all nodes in the chain.

It's very weird that create_node allocates two nodes rather than one.  In fact, you do have a memory leak in your main():


first-&gt;next = second;



There, you have just overwritten the 42 node's next pointer without having freed it.



To answer this question…


// How necessary are these checks? Under which circumstances 
// could this return NULL?
if (result == NULL) {           
    return NULL;
}



If malloc() fails (because no more memory is available), it will return NULL.  Yes, it is good practice to check whether malloc() failed.  (In practice, if you are so low on memory that you can't even allocate a single linked-list node, it's very difficult to recover gracefully.  Your program is going to die, and there's not much you can do about it.)