node 이용한 싱글 링크드 리스트 구현 :)
처음 실행 했을 때 버그도 안 나고 누수도 안 나서 살짝 당황했지만 잘 이해해서 다행이당!
// single linked list class
template <typename T>
class singleLinkedList
{
public:
// push back element!
void push_back(T element)
{
node<T>* newNode = new node<T>(element);
if (head == nullptr)
{
head = newNode;
tail = newNode;
}
else
{
tail->next = newNode;
tail = newNode;
}
++size;
}
// find element at selected index
node<T>* findNode(int findIndex)
{
node<T>* ptr = head;
for (int index = 0; index < size; ++index)
{
if (index == findIndex)
{
return ptr;
}
ptr = ptr->next;
}
return nullptr;
}
// insert element at selected index
void insertNode(T element, int insertIndex)
{
if (size < insertIndex || insertIndex < 0)
{
cout << "Can't insert index :(!" << endl;
return;
}
node<T>* newNode = new node<T>(element);
if (insertIndex == 0)
{
newNode->next = head;
newNode = head;
}
else
{
node<T>* previousNode = findNode(insertIndex - 1);
newNode->next = previousNode->next;
previousNode->next = newNode;
}
++size;
}
// delete element at selected index
void deleteNode(int insertIndex)
{
if (size < insertIndex || insertIndex < 0)
{
cout << "Can't delete index :(!" << endl;
return;
}
if (insertIndex == 0)
{
node<T>* deleteNode = head;
head = head->next;
delete deleteNode;
}
else
{
node<T>* previousNode = findNode(insertIndex - 1);
node<T>* deleteNode = previousNode->next;
previousNode->next = deleteNode->next;
delete deleteNode;
}
--size;
}
// return size of container
int Size(void) const
{
return size;
}
// delete all nodes in container
void Clear(void)
{
node<T>* ptr = head;
for(int index = 0; index < size; ++index)
{
head = head->next;
delete ptr;
ptr = head;
}
size = 0;
}
private:
node<T>* head;
node<T>* tail;
int size;
public:
singleLinkedList() : size(0), head(nullptr), tail(nullptr) {};
~singleLinkedList() {};
};
'공부 > Data Structure' 카테고리의 다른 글
double linked list 구현 (0) | 2020.07.13 |
---|---|
queue 구현 (0) | 2020.07.12 |
stack 구현 (0) | 2020.07.08 |