What I tend to do in situations like this is to work out on paper what should happen, then to try to figure out what the code should do from that. So I might get something like this:
Code:
+-+ A-> +-+ B-> NULL
| |     |X|
+-+ <-C +-+
From this we can see that when we delete X, only pointer A needs modifying.

Does LIST point to the top entry? If so you probably don't want to assign to LIST->previous.