Yes you can delete from the middle of the list.
The trick is to have a variable in your program that contains the address of the previous node. Usually, just as you advance to the next node you put the address of the current node inside this variable. When you are at the next node, that address will now be the previous node.
You then proceed as though this were a double-linked list.