Advertisement
Schnuk

Untitled

Feb 28th, 2021
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. template <typename T>
  4.  
  5.  
  6. class LinkedList
  7. {
  8. private:
  9.  
  10. int Length;
  11. T Value;
  12. LinkedList* NextElement;
  13. LinkedList* Head;
  14. LinkedList* Tail;
  15.  
  16. /*LinkedList(T* array)
  17. {
  18. T* currentElement = new LinkedList(Value = default(T), NextElement = nullptr);;
  19. for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
  20. {
  21. currentElement.Value = array[0];
  22. }
  23. }*/
  24. public:
  25.  
  26. LinkedList(){}
  27.  
  28. LinkedList(T value, LinkedList* nextElement)
  29. {
  30. this->Value = value;
  31. this->NextElement = nextElement;
  32. }
  33.  
  34. bool IsIndexCorrect(int index)
  35. {
  36. return index >= 0 && index < Length;
  37. }
  38.  
  39. void AddToTail(T value)
  40. {
  41. if (Head == nullptr)
  42. this->Tail = this->Head = new LinkedList(Value = value, NextElement = nullptr);
  43. else
  44. {
  45. LinkedList* newElement = new LinkedList(Value = value, NextElement = nullptr);
  46. Tail->NextElement = newElement;
  47. Tail = newElement;
  48. }
  49. Length++;
  50. }
  51.  
  52. void AddByIndex(int index, T value)
  53. {
  54. if (IsIndexCorrect(index))
  55. {
  56.  
  57. if (index == Length - 1)
  58. AddToTail(value);
  59. else
  60. {
  61. LinkedList* current = Head;
  62. LinkedList* newElement = new LinkedList(Value = value, NextElement = current->NextElement);
  63. LinkedList* newElementNext;
  64. if (index == 0)
  65. {
  66. newElementNext = Head->NextElement;
  67. Head = newElement;
  68. newElement->NextElement = newElementNext;
  69. }
  70. else
  71. {
  72. for (int i = 0; i < index; i++)
  73. current = current->NextElement;
  74. newElementNext = current->NextElement;
  75. current->NextElement = newElement;
  76. newElement->NextElement = newElementNext;
  77. }
  78. }
  79. }
  80. }
  81.  
  82. void DeleteByIndex(int index)
  83. {
  84. if (IsIndexCorrect(index))
  85. {
  86. LinkedList* current = Head;
  87. LinkedList* itemToDelete = nullptr;
  88. if (index == 0)
  89. {
  90. itemToDelete = current;
  91. Head = current->NextElement;
  92. }
  93. else
  94. {
  95. for (int i = 0; i < index - 1; i++)
  96. current = current->NextElement;
  97. if (index == Length - 1)
  98. {
  99. itemToDelete = Tail;
  100. Tail = current;
  101. }
  102. else
  103. {
  104. itemToDelete = current->NextElement;
  105. current->NextElement = itemToDelete->NextElement;
  106. }
  107. }
  108. Length--;
  109. delete itemToDelete;
  110. }
  111. }
  112.  
  113. bool Contains(T value)
  114. {
  115. bool isListContainValue = false;
  116. LinkedList* current = Head;
  117. while (current->NextElement != nullptr)
  118. {
  119. if (current->Value == value)
  120. {
  121. isListContainValue = true;
  122. break;
  123. }
  124. current = current->NextElement;
  125. }
  126. return isListContainValue;
  127. }
  128. };
  129.  
  130. int main()
  131. {
  132. LinkedList<int> list;
  133. list.AddToTail(666);
  134. list.AddToTail(777);
  135. list.DeleteByIndex(0);
  136. bool flag = list.Contains(666);
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement