No, it's not causing a memory leak. "delete" first calls the dtor and then deallocates the object when the dtor returns. It's probably not the most efficient way to deallocate a list, though, since if the list has a million members it sill stack up a million calls before finally popping back up through the call stack.
Singly or doubly linked has nothing to do with it.
The problem is calling delete in the dtor (which calls the next node's dtor, which calls the next, etc, until finally actually beginning to delete nodes on the way back up the call chain).
Overall, it would be best to have a List class that deletes the list in its dtor.
Another advantage of a List class is that it can have both a front and back pointer so that adding an element to the back of the list doesn't require traversing the entire list. It can also store the current size.