Advertisement
Schnuk

LinkedList.cpp

Mar 3rd, 2021 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.13 KB | None | 0 0
  1. //LinkedList.cpp
  2. #include <iostream>
  3. #include "LinkedListElement.h"
  4.  
  5. class LinkedList
  6. {
  7.  
  8. private:
  9.  
  10.     LinkedListElement* Head;
  11.     LinkedListElement* Tail;
  12.     int Length;
  13.  
  14. public:
  15.  
  16.     LinkedList()
  17.     {
  18.         Head = nullptr;
  19.         Tail = nullptr;
  20.         Length = 0;
  21.     }
  22.  
  23.     LinkedList(int value)
  24.     {
  25.         LinkedListElement* newElement = new LinkedListElement(value, nullptr);
  26.         Head = newElement;
  27.         Tail = newElement;
  28.         Length = 1;
  29.     }
  30.  
  31.     LinkedList(const LinkedList& other)
  32.     {
  33.         LinkedListElement* currentElement = Head;
  34.         LinkedListElement* currentOtherElement = other.Head;
  35.         for (int i = 0; i < other.Length; i++)
  36.         {
  37.             currentElement->SetNextElement(currentOtherElement->GetNextElement());
  38.             currentElement->SetValue(currentOtherElement->GetValue());
  39.         }
  40.     }
  41.  
  42.     ~LinkedList()
  43.     {
  44.         while (Head != nullptr)
  45.         {
  46.             LinkedListElement* nextElement = Head->GetNextElement();
  47.             delete Head;
  48.             Head = nextElement;
  49.         }
  50.     }
  51.  
  52.     bool IsIndexCorrect(int index)
  53.     {
  54.         return index >= 0 && index < Length;
  55.     }
  56.  
  57.     void AddToTail(int value)
  58.     {
  59.         if (Head == nullptr)
  60.         {
  61.             LinkedListElement* newElement = new LinkedListElement(value, nullptr);
  62.             Head = newElement;
  63.             Tail = Head;
  64.         }
  65.         else
  66.         {
  67.             LinkedListElement* newElement = new LinkedListElement(value, nullptr);
  68.             Tail->SetNextElement(newElement);
  69.             Tail = newElement;
  70.         }
  71.         Length++;
  72.     }
  73.  
  74.     void AddByIndex(int index, int value)
  75.     {
  76.         if (IsIndexCorrect(index) || (index == 0 && Length == 0))
  77.         {
  78.             if (Head == nullptr)
  79.                 AddToTail(value);
  80.             else
  81.             {
  82.                 if (index < Length)
  83.                 {
  84.                     LinkedListElement* current = Head;
  85.                     LinkedListElement* newElement = new LinkedListElement(value, nullptr);
  86.                     LinkedListElement* elementNeededToMove = new LinkedListElement();
  87.                     if (index == 0)
  88.                     {
  89.                         elementNeededToMove = Head->GetNextElement();
  90.                         Head = newElement;
  91.                     }
  92.                     else
  93.                     {
  94.                         for (int i = 0; i < index - 1; i++)
  95.                             current = current->GetNextElement();
  96.                         elementNeededToMove = current->GetNextElement();
  97.                         current->SetNextElement(newElement);
  98.                     }
  99.                     newElement->SetNextElement(elementNeededToMove);
  100.                     delete elementNeededToMove;
  101.                 }
  102.             }
  103.             Length++;
  104.         }
  105.     }
  106.  
  107.     void DeleteByIndex(int index)
  108.     {
  109.         if (IsIndexCorrect(index))
  110.         {
  111.             LinkedListElement* current = Head;
  112.             LinkedListElement* itemToDelete = nullptr;
  113.             if (index == 0)
  114.             {
  115.                 itemToDelete = current;
  116.                 Head = current->GetNextElement();
  117.             }
  118.             else
  119.             {
  120.                 for (int i = 0; i < index - 1; i++)
  121.                     current = current->GetNextElement();
  122.                 if (index == Length - 1)
  123.                 {
  124.                     itemToDelete = Tail;
  125.                     Tail = current;
  126.                 }
  127.                 else
  128.                 {
  129.                     itemToDelete = current->GetNextElement();
  130.                     current->SetNextElement(itemToDelete->GetNextElement());
  131.                 }
  132.             }
  133.             delete itemToDelete;
  134.             Length--;
  135.         }
  136.     }
  137.  
  138.     bool Contains(int value)
  139.     {
  140.         bool isListContainValue = false;
  141.         LinkedListElement* current = Head;
  142.         while (current != nullptr)
  143.         {
  144.             if (current->GetValue() == value)
  145.             {
  146.                 isListContainValue = true;
  147.                 break;
  148.             }
  149.             current = current->GetNextElement();
  150.         }
  151.         return isListContainValue;
  152.     }
  153. };
  154.  
  155. int main() {}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement