#include "..\CookHeader.h"

typedef struct _Node {
	string data[2]; // 이름, 키
	struct _Node* link = NULL;
} Node2;

Array <Node2*> memory;
Node2* head, * current, * pre;
Array <Array <string>> dataArray = { {"지민", "180"}, {"정국", "177"},
			{"뷔", "183"}, {"슈가", "175"}, {"진", "179"} };

void printNodes2(Node2* start) {
	if (start == NULL)
		return;
	Node2* current = start;
	print("[" + current->data[0] + "," + current->data[1] + "]");
	while (current->link != NULL) {
		current = current->link;
		print("[" + current->data[0] + "," + current->data[1] + "]");
	}
	println("");
}

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

void makeSimpleLInkedList(Array <string> nameHeight) {
	printNodes2(head);

	Node2* node;
	node = new Node2;
	node->data[0] = nameHeight[0];	// 이름
	node->data[1] = nameHeight[1];	// 키
	memory.push_back(node);
	if (head == NULL) {				// 첫 번째 노드일 때
		head = node;
		return;
	}
	if (stoi(head->data[1]) > stoi(nameHeight[1])) {	// 첫 번째 노드보다 작을 때
		node->link = head;
		head = node;
		return;
	}
	// 중간 노드로 삽입하는 경우
	current = head;
	while (current->link != NULL) {
		pre = current;
		current = current->link;
		if (stoi(current->data[1]) > stoi(nameHeight[1])) {
			pre->link = node;
			node->link = current;
			return;
		}
	}
	// 삽입하는 노드가 가장 큰 경우
	current->link = node;
}

int main() {
	for (int i = 0; i < len(dataArray); i++) {
		makeSimpleLInkedList(dataArray[i]);
	}
	printNodes2(head);

	freeMemory();
}