자기개발/C++

C++ - 단순연결리스트 (구조체)

pi92 2021. 9. 14. 10:48
#include <iostream>
using namespace std;
#pragma warning(disable:4996)

typedef struct Node
{
	char m_strName[256];   ///< 이름
	int  m_nAge;         ///< 나이 
	struct Node* m_pNext;   ///< Next Node Pointer

}NODE, *LPNODE;

void   InsertNode(struct Node** pHead, const char* pStrName, int nAge);
void   DisplayNode(struct Node* pHead);
void   DeleteNode(struct Node** node, int nAge);

int main()
{
	LPNODE   pHead = nullptr;

	//===============================================================================
	//  pHead 를 함수 인자로 넘겨서 Single Linked List를 구현할 것 
	//  ... 으로 되어있는 부분 채워넣을 것 
	//===============================================================================

	InsertNode(&pHead, "aaa", 1);
	InsertNode(&pHead, "bbb", 2);
	InsertNode(&pHead, "ccc", 3);
	InsertNode(&pHead, "ddd", 4);
	InsertNode(&pHead, "eee", 5);

	DisplayNode(pHead);
	// (aaa, 1) -> (bbb, 2) -> (ccc, 3) -> (ddd, 4) -> (eee, 5)
	cout << endl;

	DeleteNode(&pHead, 1);
	DeleteNode(&pHead, 3);
	DeleteNode(&pHead, 5);

	DisplayNode(pHead);
	////(bbb, 2) -> (ddd, 4)

	system("pause");

	return 0;
}

void   InsertNode(struct Node** Head, const char* pStrName, int nAge)
{
	struct Node* newNode = new Node;
	struct Node* prev = *Head;

	newNode->m_nAge = nAge;
	strcpy(newNode->m_strName, pStrName);
	newNode->m_pNext = NULL;

	//순차적으로 추가 1->2->3->4
	//if (*Head == NULL)
	//{
	//	*Head = newNode;
	//	return;
	//}
	//while (prev->m_pNext != NULL)
	//	prev = prev->m_pNext;
	//prev->m_pNext = newNode;



	//역순으로 추가 5->4->3->2->1
	if (*Head == NULL)
	{
		*Head = newNode;
		return;
	}
	else
	{
		newNode->m_pNext = prev;
		*Head = newNode;
		return;
	}

}

void   DisplayNode(struct Node* node)
{
	while (node != NULL)
	{
		cout << "(" << node->m_strName << "," << node->m_nAge << ") ";
		node = node->m_pNext;
		if (node != NULL)
			cout << "->";
	}cout << endl;
}

void   DeleteNode(struct Node** node, int nAge)
{
	struct Node* temp;
	struct Node* prev;

	temp = *node;
	prev = temp;

	while (temp != NULL)
	{
		if (temp->m_nAge == nAge)
		{
			if (temp == *node) {
				*node = (*node)->m_pNext;
				return;
			}
			prev->m_pNext = temp->m_pNext;
			delete temp;
			temp = nullptr;
			return;
		}

		prev = temp;
		temp = temp->m_pNext;
	}

	if (temp == NULL)
	{
		cout << "입력 값이 없습니다." << endl;
	}

}