#pragma once #include 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() const; inline LinkedListNode* getLast() const; }; 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() const; inline int size() const; void clear(); templatevoid add(T2&& data); templateinline void add(LinkedListNode* node, T2&& data); templatevoid addFirst(T2&& data); inline void addAll(const LinkedList &list); void addAll(LinkedListNode* node,const LinkedList &list); T& get(const int id); const T& get(const int id) const; inline LinkedListNode* getHead(); inline LinkedListNode* getEnd(); inline const LinkedListNode* getHead() const; inline const LinkedListNode* getEnd() const; void remove(LinkedListNode* node); void remove(const int id); void sort(const bool (*cmp)(const T &a,const T &b)); void sort(const std::function &cmp); }; #include"LinkedList.cpp"