Linked List 클래스로 구현

2025. 1. 7. 10:44·내배캠/C++
// 노드 클래스 정의
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
'내배캠/C++' 카테고리의 다른 글
  • Greedy 알고리즘
  • friend class
  • 유클리드 거리 공식
  • priority_queue
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (205) N
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (146) N
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (11) N
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    Linked List 클래스로 구현
    상단으로

    티스토리툴바