@@ -242,31 +242,45 @@ def pop(self) -> Any:
242
242
Removes the last element of the deque and returns it.
243
243
Time complexity: O(1)
244
244
@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
248
255
15182
249
- >>> our_deque
256
+ >>> our_deque2
250
257
[1, 2, 3]
258
+
251
259
>>> from collections import deque
252
260
>>> deque_collections = deque([1, 2, 3, 15182])
253
261
>>> collections_popped = deque_collections.pop()
254
262
>>> collections_popped
255
263
15182
256
264
>>> deque_collections
257
265
deque([1, 2, 3])
258
- >>> list(our_deque ) == list(deque_collections)
266
+ >>> list(our_deque2 ) == list(deque_collections)
259
267
True
260
- >>> our_popped == collections_popped
268
+ >>> our_popped2 == collections_popped
261
269
True
262
270
"""
263
271
# make sure the deque has elements to pop
264
272
assert not self .is_empty (), "Deque is empty."
265
273
266
274
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
270
284
271
285
self ._len -= 1
272
286
@@ -277,11 +291,17 @@ def popleft(self) -> Any:
277
291
Removes the first element of the deque and returns it.
278
292
Time complexity: O(1)
279
293
@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
283
303
15182
284
- >>> our_deque
304
+ >>> our_deque2
285
305
[1, 2, 3]
286
306
>>> from collections import deque
287
307
>>> deque_collections = deque([15182, 1, 2, 3])
@@ -290,17 +310,23 @@ def popleft(self) -> Any:
290
310
15182
291
311
>>> deque_collections
292
312
deque([1, 2, 3])
293
- >>> list(our_deque ) == list(deque_collections)
313
+ >>> list(our_deque2 ) == list(deque_collections)
294
314
True
295
- >>> our_popped == collections_popped
315
+ >>> our_popped2 == collections_popped
296
316
True
297
317
"""
298
318
# make sure the deque has elements to pop
299
319
assert not self .is_empty (), "Deque is empty."
300
320
301
321
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
304
330
305
331
self ._len -= 1
306
332
@@ -432,3 +458,5 @@ def __repr__(self) -> str:
432
458
import doctest
433
459
434
460
doctest .testmod ()
461
+ dq = Deque ([3 ])
462
+ dq .pop ()
0 commit comments