#pragma once template class LinkedList; template class LinkedListNode; template class LinkedListNode { private: friend class LinkedList; templateLinkedListNode(T2&& data); ~LinkedListNode() = default; LinkedListNode* last, * next; LinkedListNode(const LinkedListNode& d); LinkedListNode(LinkedListNode&& d) = delete; LinkedListNode& operator= (LinkedListNode&& d) = delete; LinkedListNode& operator= (const LinkedListNode& d); public: T data; inline LinkedListNode* getNext(); inline LinkedListNode* getLast(); }; template class LinkedList { private: LinkedListNode* head,*end; int total; public: LinkedList(); ~LinkedList(); LinkedList(const LinkedList& data); LinkedList(LinkedList&& data) noexcept; LinkedList& operator= (LinkedList&& data) noexcept; LinkedList& operator= (const LinkedList& data); inline bool isEmpty(); inline int size(); void clear(); templatevoid add(T2&& data); templateinline void add(LinkedListNode* node, T2&& data); templatevoid addFirst(T2&& data); inline void addAll(LinkedList &list); void addAll(LinkedListNode* node,LinkedList &list); inline LinkedListNode* getHead(); inline LinkedListNode* getEnd(); void remove(LinkedListNode* node); void sort(bool (*cmp)(const T &a,const T &b)); }; #include"LinkedList.cpp"