#include "..\CookHeader.h"

typedef struct _Node {
	string data;
	struct _Node* link = NULL;
} Node;

Array <Node*> memory;
Node* head, * current, * pre;
Array <string> dataArray = { "다현", "정연", "쯔위", "사나", "지효" };

void printNodes(Node* start) {
	if (start == NULL)
		return;
	Node* current = start;
	print(current->data);
	while (current->link != start) {
		current = current->link;
		print(current->data);
	}
	println("");
}

void freeMemory() { // 할당된 모든 노드의 메모리를 해제한다.
	for (int i = 0; i < len(memory); i++)
		delete memory[i];
}

void deleteNode(string deleteData) {
	Node* last;
	if (head->data == deleteData) {
		current = head;
		head = head->link;
		last = head;
		while (last->link != current)	// 마지막 노드를 찾으면 반복 종료
			last = last->link;			// last를 다음 노드로 변경
		last->link = head;				// 마지막 노드의 링크에 head가 가리키는 노드 지정
		current->data = "None";			// 현재 노드 제거
		return;
	}
	current = head;
	while (current->link != head) {
		pre = current;
		current = current->link;
		if (current->data == deleteData) {
			pre->link = current->link;
			current->data = "None";
			return;
		}
	}
}

int main() {
	Node* node = new Node;
	node->data = dataArray[0];					// 첫 번째 노드
	head = node;
	node->link = head;
	memory.push_back(node);

	for (int i = 1; i < len(dataArray); i++) {	// 두 번째 이후 노드
		string data = dataArray[i];
		pre = node;
		node = new Node;
		node->data = data;
		pre->link = node;
		node->link = head;
		memory.push_back(node);
	}
	printNodes(head);

	deleteNode("다현");
	printNodes(head);
	
	deleteNode("쯔위");
	printNodes(head);
	
	deleteNode("지효");
	printNodes(head);
	
	deleteNode("재남");
	printNodes(head);

	freeMemory();
}