공부/Data Structure

single linked list 구현

Lero God 2020. 7. 12. 22:39

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