In many programming languages, linked list routines have a bunch of annoying special cases around the head of the list. An insertion other than at the top involves some assignments to the new and old "next" values, whereas to insert at the head of the list, you do new->next = head; and head = new;. It's a special case. For deletion, the special cases look even more grotty, to me. In C, this can be made uniform with an extra level of indirection. Here is an example program, with both styles of linked-list manipulation (in different files). "newstyle.c" is this extra-level-of-indirection version. "oldstyle.c" is like how we would write it in most programming languages, but has the special cases. testmain.c can be linked with one of them to test them. It's a fairly random frobbing of the linked list code. printall() and search(), basically, show what we want the linked list structure to be; whereas insert() and delete() are the functions which build it.