@@ -242,31 +242,45 @@ def pop(self) -> Any:
242242 Removes the last element of the deque and returns it.
243243 Time complexity: O(1)
244244 @returns topop.val: the value of the node to pop.
245- >>> our_deque = Deque([1, 2, 3, 15182])
246- >>> our_popped = our_deque.pop()
247- >>> our_popped
245+ >>> our_deque1 = Deque([1])
246+ >>> our_popped1 = our_deque1.pop()
247+ >>> our_popped1
248+ 1
249+ >>> our_deque1
250+ []
251+
252+ >>> our_deque2 = Deque([1, 2, 3, 15182])
253+ >>> our_popped2 = our_deque2.pop()
254+ >>> our_popped2
248255 15182
249- >>> our_deque
256+ >>> our_deque2
250257 [1, 2, 3]
258+
251259 >>> from collections import deque
252260 >>> deque_collections = deque([1, 2, 3, 15182])
253261 >>> collections_popped = deque_collections.pop()
254262 >>> collections_popped
255263 15182
256264 >>> deque_collections
257265 deque([1, 2, 3])
258- >>> list(our_deque ) == list(deque_collections)
266+ >>> list(our_deque2 ) == list(deque_collections)
259267 True
260- >>> our_popped == collections_popped
268+ >>> our_popped2 == collections_popped
261269 True
262270 """
263271 # make sure the deque has elements to pop
264272 assert not self .is_empty (), "Deque is empty."
265273
266274 topop = self ._back
267- self ._back = self ._back .prev_node # set new back
268- # drop the last node - python will deallocate memory automatically
269- self ._back .next_node = None
275+ # if only one element in the queue: point the front and back to None
276+ # else remove one element from back
277+ if self ._front == self ._back :
278+ self ._front = None
279+ self ._back = None
280+ else :
281+ self ._back = self ._back .prev_node # set new back
282+ # drop the last node, python will deallocate memory automatically
283+ self ._back .next_node = None
270284
271285 self ._len -= 1
272286
@@ -277,11 +291,17 @@ def popleft(self) -> Any:
277291 Removes the first element of the deque and returns it.
278292 Time complexity: O(1)
279293 @returns topop.val: the value of the node to pop.
280- >>> our_deque = Deque([15182, 1, 2, 3])
281- >>> our_popped = our_deque.popleft()
282- >>> our_popped
294+ >>> our_deque1 = Deque([1])
295+ >>> our_popped1 = our_deque1.pop()
296+ >>> our_popped1
297+ 1
298+ >>> our_deque1
299+ []
300+ >>> our_deque2 = Deque([15182, 1, 2, 3])
301+ >>> our_popped2 = our_deque2.popleft()
302+ >>> our_popped2
283303 15182
284- >>> our_deque
304+ >>> our_deque2
285305 [1, 2, 3]
286306 >>> from collections import deque
287307 >>> deque_collections = deque([15182, 1, 2, 3])
@@ -290,17 +310,23 @@ def popleft(self) -> Any:
290310 15182
291311 >>> deque_collections
292312 deque([1, 2, 3])
293- >>> list(our_deque ) == list(deque_collections)
313+ >>> list(our_deque2 ) == list(deque_collections)
294314 True
295- >>> our_popped == collections_popped
315+ >>> our_popped2 == collections_popped
296316 True
297317 """
298318 # make sure the deque has elements to pop
299319 assert not self .is_empty (), "Deque is empty."
300320
301321 topop = self ._front
302- self ._front = self ._front .next_node # set new front and drop the first node
303- self ._front .prev_node = None
322+ # if only one element in the queue: point the front and back to None
323+ # else remove one element from front
324+ if self ._front == self ._back :
325+ self ._front = None
326+ self ._back = None
327+ else :
328+ self ._front = self ._front .next_node # set new front and drop the first node
329+ self ._front .prev_node = None
304330
305331 self ._len -= 1
306332
@@ -432,3 +458,5 @@ def __repr__(self) -> str:
432458 import doctest
433459
434460 doctest .testmod ()
461+ dq = Deque ([3 ])
462+ dq .pop ()
0 commit comments