// From the software distribution accompanying the textbook // "A Practical Introduction to Data Structures and Algorithm Analysis, // Third Edition (C++)" by Clifford A. Shaffer. // Source code Copyright (C) 2007-2011 by Clifford A. Shaffer. // Singly linked list node with freelist support template class Link { private: static Link* freelist; // Reference to freelist head public: E element; // Value for this node Link* next; // Point to next node in list // Constructors Link(const E& elemval, Link* nextval =NULL) { element = elemval; next = nextval; } Link(Link* nextval =NULL) { next = nextval; } void* operator new(size_t) { // Overloaded new operator if (freelist == NULL) return ::new Link; // Create space Link* temp = freelist; // Can take from freelist freelist = freelist->next; return temp; // Return the link } // Overloaded delete operator void operator delete(void* ptr) { ((Link*)ptr)->next = freelist; // Put on freelist freelist = (Link*)ptr; } }; // The freelist head pointer is actually created here template Link* Link::freelist = NULL;