// Example of how to implement a templated linked list #include <iostream> #include <string> using namespace std; class Cat { public: Cat(string name = "unnamed", int age = 0): name(name), age(age) { } const string name; int age; friend ostream& operator<<(ostream& os, Cat* cat) { os << "Cat: { name: "<< cat->name << ", age: " << cat->age << " }"; return os; } }; template<class T> class LinkedList { private: class Node { friend class LinkedList; T data; Node* next; Node(T data, Node* next = NULL): data(data), next(next) { } }; Node* head; public: LinkedList(): head(NULL) { } ~LinkedList() { Node* currentNode = head; Node* nextNode = NULL; while (currentNode != NULL) { nextNode = currentNode->next; delete currentNode; currentNode = nextNode; } } void append(T ...