12303. 기초 Single Linked List 연습
Code Battle (`23 동계 대학생 S/W 알고리즘 특강 기초학습 문제)
본 게시글은 개인 학습 용도로 작성한 게시글입니다.
(문제 출처: SW Expert Academy)
- 노드를 정적 할당하여 Single-linked list를 구현하는 문제.
- head가
nullptr
일 경우에 대한 처리가 은근히 신경써야했던 부분이었다.
#define MAX_NODE 10000
struct Node
{
int data;
Node *next;
};
Node node[MAX_NODE];
int nodeCnt;
Node *head;
Node *getNode(int data)
{
node[nodeCnt].data = data;
node[nodeCnt].next = nullptr;
return &node[nodeCnt++];
}
void init()
{
nodeCnt = 0;
head = nullptr;
}
void addNode2Head(int data)
{
Node *newNode = getNode(data);
if (head != nullptr)
{
newNode->next = head;
}
head = newNode;
}
void addNode2Tail(int data)
{
if (head == nullptr)
{
addNode2Head(data);
return;
}
Node *newNode = getNode(data);
Node *currNode = head;
while (currNode->next != nullptr)
{
currNode = currNode->next;
}
currNode->next = newNode;
}
void addNode2Num(int data, int num)
{
if (num == 1)
{
addNode2Head(data);
return;
}
Node *newNode = getNode(data);
Node *prevNode = head;
for (int i = 2; i < num; i++)
{
prevNode = prevNode->next;
}
if (prevNode == head)
{
head = newNode;
}
newNode->next = prevNode->next;
prevNode->next = newNode;
}
void removeNode(int data)
{
Node *prevNode = nullptr;
Node *currNode = head;
while (currNode != nullptr)
{
if (currNode->data != data)
{
prevNode = currNode;
currNode = currNode->next;
continue;
}
if (prevNode == nullptr)
{
head = currNode->next;
}
else
{
prevNode->next = currNode->next;
}
return;
}
}
int getList(int output[MAX_NODE])
{
Node *currNode = head;
int currIndex = 0;
while (currNode != nullptr)
{
output[currIndex] = currNode->data;
currNode = currNode->next;
currIndex++;
}
return currIndex;
}