1: // Created by Frank M. Carrano and Timothy M. Henry. 2: // Copyright (c) 2017 Pearson Education, Hoboken, New Jersey. 4: template<class ItemType> 5: bool LinkedQueue<ItemType>::dequeue() 6: { 7: bool result = false; 8: if (!isEmpty()) 9: { 10: // Queue is not empty; remove front 11: auto nodeToDeletePtr = frontPtr; 12: if (frontPtr == backPtr) 13: { // Special case: one node in queue 14: // Set frontPtr and backPtr to nullptr 15: frontPtr.reset(); 16: backPtr.reset(); 17: } 18: else 19: frontPtr = frontPtr–>getNext(); 20: 21: // Maintain an accurate reference count for first node 22: nodeToDeletePtr –>setNext(nullptr); 23: 24: // Removed node will be deallocated when method ends 25: result = true; 26: } // end if 27: 28: return result; 29: } // end dequeue