@OP
DLLists can be walked through in both directions head->tail, tail->head.
You get the maximum by 'walking through the list.
Select a suitable current_maximum value.
Go to the next node and if the value there is greater than that then replace the current_maximum.
Keep going through that to the end and the current-maximum is the value you want.
You delete a value by walking through the list, finding the relevant value. The first will be the one found by going head->tail.
When/if its found you have to disconnect it from the list taking into account whether the value is internal to the list or at the ends.