본문 바로가기
알고리즘 및 디자인패턴

연결 리스트 구현 연습

by Mostlove 2023. 7. 13.
728x90
반응형

using System;


namespace CSharp1
{
    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;

            //만약에 아직 방이 아ㅖ 없었다면, 새로 추가한 첫번째 방이 곧 Head이다
            if (Head == null)
                Head = newRoom;

            //기존의 [마지막 방]과 [새로 추가되는 방]을 연결해준다.
            if (Tail != null)
            {
                Tail.Next = newRoom;
                newRoom.Prev = Tail;
            }

            //[새로 추가되는 방]을 [마지막 방]으로 인정한다.
            Tail = newRoom;
            Count++;
            return newRoom;
        }

        //101 102 103 104 105
        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;

            Count --;
        }
    }

    class Board
    {
        public int[] _data = new int[25];
        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);
        }
    }
}

반응형

'알고리즘 및 디자인패턴' 카테고리의 다른 글

Binary Tree  (0) 2023.07.13
맵 만들기  (0) 2023.07.13
동적 배열 구현 연습  (0) 2023.07.13
배열, 동적 배열, 연결 리스트 비교  (0) 2023.07.13
세팅  (0) 2023.07.13