#include using namespace std; class Element { private: int v; Element* next; public: Element() { v = 0; next = nullptr; } Element(int x, Element* next) { v = x; this->next = next; } int getValue() { return v; } void setValue(int v) { this->v = v; this->v = v; } Element* getNext() { return next; } void setNext(Element* p) { next = p; } }; class LinkedList { private: Element* head; Element* tail; int size; public: LinkedList() { head = nullptr; tail = nullptr; size = 0; } bool empty() { if (size == 0) return true; else return false; } int getSize() { return size; } Element* getFirst() { return head; } Element* getLast() { return tail; } Element* getNext(Element* p) { return p->getNext(); } Element* getPrev(Element* p) { Element* tmp = head; do { if (tmp->getNext() == p) return tmp; else tmp = tmp->getNext(); } while (tmp->getNext() != p); return nullptr; } int retrive(Element* p) { return p->getValue(); } Element* locate(int x) { Element* tmp = head; for(int i = 0; i < size; i++) { tmp = tmp->getNext(); if (tmp->getValue() == x) return tmp; } return nullptr; } void append(int x) { if (empty()) { head = new Element(x, nullptr); tail = head; } else { tail->setNext(new Element(x, nullptr)); tail = tail->getNext(); } size++; } void insert(Element* p, int x) { p->setValue(x); } void del(Element* p) { if (p == head) { head = head->getNext(); delete p; if (head == nullptr) tail = nullptr; } else { Element* tmp = getPrev(p); tmp->setNext(getNext(p)); delete p; if (getNext(tmp) == nullptr) tail = tmp; } size--; } void clear() { Element* tmp; while (head != nullptr) { tmp = getNext(head); delete head; head = tmp; } } friend ostream& operator<<(ostream& out, LinkedList* l) { Element* tmp = l->head; for (int i = 0; i < l->getSize(); i++) { out << tmp->getValue() << " | "; tmp = tmp->getNext(); } return out; } void insert(int p, int x) { Element* tmp = head; for (int i = 0; i < p; i++) { tmp = tmp->getNext(); } Element* tmp2 = tmp; for (int i = p; i < size; i++) { tmp->setValue(x); tmp->setNext(tmp2); tmp = tmp2; tmp2 = tmp2->getNext(); } size++; tail = tmp2; } void del(int p) { Element* tmp = head; for (int i = 0; i < p; i++) { tmp = tmp->getNext(); } del(tmp); } ~LinkedList(); }; int main() { //Zadanie 5.1 - test cout << endl << "Zadanie 5.1 - test" << endl; LinkedList* a = new LinkedList(); cout << endl << "empty(): 1 - " << a->empty(); cout << endl << "getSize(): 0 - " << a->getSize(); cout << endl << "append(4): 4 | - "; a->append(4); cout << " " << a; cout << endl << "append(6): 4 | 6 | - "; a->append(6); cout << " " << a; //cout << endl << ": -" << ; cout << endl << "retrive(getPrev(tail)): 4 - " << a->retrive(a->getPrev(a->getLast())); cout << endl << "locate(6): adress - " << a->locate(6); cout << endl << "locate(7): nullptr - " << a->locate(7); return 0; }