C#/코드

C# 연결 리스트 만들기

DoubleJK 2021. 9. 14. 12:31
728x90
namespace Algorithm
{
    class MyLinkedListNode<T>
    {
        public T Data;

        // 참조, 주소 값을 저장
        public MyLinkedListNode<T> Next; // 다음 값
        public MyLinkedListNode<T> Prev; // 이전 값
    }

    class MyLinkedList<T>
    {
        public MyLinkedListNode<T> Head = null; // 첫번째 방
        public MyLinkedListNode<T> Tail = null; // 마지막 방

        public int Count = 0; // 총 방의 개수

        public MyLinkedListNode<T> AddLast(T data)
        {
            MyLinkedListNode<T> newRoom = new MyLinkedListNode<T>();
            newRoom.Data = data;

            // 방이 없다면 새로운 방이 첫번째 방
            if (Head == null)
            {
                Head = newRoom;
            }

            // 기존의 마지막 방을 새로 추가된 방과 연결
            if (Tail != null)
            {
                Tail.Next = newRoom;
                newRoom.Prev = Tail;
            }

            // 새로 추가된 방을 마지막 방으로 지정
            Tail = newRoom;
            Count++;

            return newRoom;
        }

        public void Remove(MyLinkedListNode<T> room)
        {
            // 기존의 두번째 방을 첫번째 방으로 지정
            if (Head == room)
            {
                Head = Head.Next;
            }

            // 마지막 전 방을 마지막으로 지정
            if (Tail == room)
            {
                Tail = Tail.Prev;
            }

            // 제거한 방의 전 방의 다음 방을 제거한 방의 다음으로 지정
            if (room.Prev != null)
            {
                room.Prev.Next = room.Next;
            }

            // 제거한 방의 다음 방의 전 방을 제거한 방의 전 방으로 지정
            if (room.Next != null)
            {
                room.Next.Prev = room.Prev;
            }
        }
    }

    class Board
    {
        public MyLinkedList<int> _data3 = new MyLinkedList<int>();     // 연결 리스트

        // 연결 리스트 구현 연습
        public void Initialize()
        {
            _data3.AddLast(101); // 맨 뒤에 값을 추가
            _data3.AddLast(102);
            MyLinkedListNode<int> node = _data3.AddLast(103);
            _data3.AddLast(104);
            _data3.AddLast(105);

            _data3.Remove(node); 
        }
    }
}
728x90

'C# > 코드' 카테고리의 다른 글

C# 맵 그리기  (0) 2021.09.14
C# 동적 배열 만들기  (0) 2021.09.09
C# 다차원 배열을 이용한 코드  (0) 2021.09.01