The code for deleting block from the free list above will not work if the free list is empty! So check first.
However, the code make also not work at the two ends of the heap or if there is only 1 free block left on the free list!
You could check for those special cases.
Adding special nodes (blocks) to mark the beginning and the end of a linked list can make the code above work in all cases.
With Header and Trailer "free" blocks, every actual free block will have a previous block and a next block and so the deletion code will work in all cases including the problem boundary cases.