Doubly linked list

In a doubly-linked list, we have to pay a bit more attention to what this is doing - and what it might be missing.  When you replace self.head with self.head.next, what happens to the old self.head?  Where is the "last" pointer on the new head node pointing?  Is the old head node going to be garbage collected?

Ditto in the "shift" method below.