// 노드 클래스 정의
class Node
{
private:
int Data;
Node* Next;
public:
Node(int Value)
{
this->Data = Value;
this->Next = nullptr;
}
friend class LinkedList; // LinkedList가 private, protected 멤버에 접근 허용
};
// 링크드리스트 클래스 정의
class LinkedList
{
private:
Node* Head;
int NodeCount;
public:
LinkedList(int Value)
{
this->Head = new Node(Value);
this->NodeCount = 1;
}
// 노드 추가 메서드
// 1. Head부터 nullptr까지 탐색해서 꼬리 위치 확보
// 2. 꼬리 위치의 Next에 Value 값을 담은 새로운 노드 생성
// 3. Node의 개수 증가
void Append(int Value)
{
Node* CurrentNode = this->Head;
while (CurrentNode->Next != nullptr)
{
CurrentNode = CurrentNode->Next;
}
CurrentNode->Next = new Node(Value);
this->NodeCount++;
}
// 해당 인덱스 위치의 노드를 찾아 반환 메서드
Node* GetNode(int Idx)
{
// 유효한 인덱스가 아닐 경우
if (Idx < 0 || Idx >= NodeCount)
{
cout << "해당 Index 노드는 없습니다." << endl;
return nullptr;
}
// 인덱스 위치의 노드 찾기
Node* TargetNode = this->Head;
for (int i = 0; i < Idx; i++)
{
TargetNode = TargetNode->Next;
}
return TargetNode;
}
// 원하는 인덱스 위치에 새로운 Value의 노드 추가 메서드
void AddNode(int Idx, int Value)
{
Node* NewNode = new Node(Value);
// 만약 0번 인덱스 위치에 노드 추가할 경우
// 1. 새로운 노드가 Head를 가리키게 함
// 2. Head가 추가된 노드를 가리키게 함
// 3. 노드의 개수 증가
if (Idx == 0)
{
NewNode = this->Head;
this->Head = NewNode;
this->NodeCount++;
return;
}
// Idx가 0이 아닌 경우
// 1. 이전 노드가 새로운 노드를 가리키고,
// 2. 새로운 노드가 기존 Idx위치에 있던 노드를 가리킨다.
// 3. 노드의 개수 증가
Node* PreviousNode = GetNode(Idx - 1);
Node* NextNode = PreviousNode->Next;
PreviousNode->Next = NewNode;
NewNode->Next = NextNode;
this->NodeCount;
}
};
friend class에 대해 새롭게 알게 되어 정리 하였다.
https://dong-grae.tistory.com/98
friend class
friend class한 클래스의 private 혹은 protected 멤버에 다른 클래스가 직접 접근할 수 있도록 허용하는 기능이다.이를 통해 두 클래스가 밀접하게 협력할 수 있도록 한다. 특징1. 캡슐화 유지:friend는
dong-grae.tistory.com
'내배캠 > C++' 카테고리의 다른 글
Greedy 알고리즘 (0) | 2025.01.08 |
---|---|
friend class (0) | 2025.01.07 |
유클리드 거리 공식 (0) | 2025.01.06 |
priority_queue (1) | 2025.01.06 |
std::vector를 class로 구현 (1) | 2024.12.31 |