public void AddAfter(DoubleLinkedListNode <T> current, DoubleLinkedListNode <T> newNode)
        {
            if (head == null || current == null || newNode == null)
            {
                throw new InvalidOperationException();
            }

            // Current : 1
            // NewNode ; 2
            // 기존 Next ; 3 - 라고 생각했을 떄

            newNode.Next      = current.Next;   // 2과 3를 연결
            current.Next.Prev = newNode;        // 3의 이전 숫자는 2
            newNode.Prev      = current;        // 2의 이전 숫자는 1
            current.Next      = newNode;        // 1과 2를 연결
        }
        public void Add(DoubleLinkedListNode <T> newNode)
        {
            // 첫번째 노드면
            if (head == null)
            {
                head      = newNode;
                head.Next = null;
                head.Prev = null;
            }
            else
            {
                var tail = head.Prev; // 오해하지 말자 - Tail은 마지막 노드를 의미한다.
                // 처음과 마지막 사이에 데이터를 차곡차곡 쌓아가는 느낌으로다가..

                head.Prev    = newNode;
                tail.Next    = newNode;
                newNode.Prev = tail;
                newNode.Next = head;
            }
        }
        public void Remove(DoubleLinkedListNode <T> removeNode)
        {
            if (head == null || removeNode == null)
            {
                return;
            }

            // 삭제할 노드가 헤드 + 노드가 1개일 경우
            if (removeNode == head && head == head.Next)
            {
                head = null;
            }
            // prev 노드와 Next 노드를 연결 및 removeNode를 Null처리한다.
            else
            {
                removeNode.Prev.Next = removeNode.Next;
                removeNode.Next.Prev = removeNode.Prev;
            }

            removeNode = null;
        }
        // 원형 연결 리스트인지 체크하는 방법 - 한 바퀴 돌려서 Head가 나오면 원형, 아니면 원형이 아님
        public bool IsCircular(DoubleLinkedListNode <T> node)
        {
            if (head == null)
            {
                return(true);
            }

            var current = head;

            // 연결이 안되어있으면 결국 Null이 나올 거니까
            while (current != null)
            {
                current = current.Next;
                if (current == head)
                {
                    return(true);
                }
            }

            return(false);
        }
        public void Add(DoubleLinkedListNode <T> newNode)
        {
            // 첫 데이터를 경우
            if (head == null)
            {
                head = newNode;
            }
            else
            {
                var current = head;

                // DoubleLinkedList의 마지막(Tail) 까지 이동

                while (current != null && current.Next != null)
                {
                    current = current.Next;
                }

                current.Next = newNode;
                newNode.Next = null;        // 마지막이니까
                newNode.Prev = current;
            }
        }
 public DoubleLinkedListNode(T Data, DoubleLinkedListNode <T> prev, DoubleLinkedListNode <T> next)
 {
     this.Data = Data;
     this.Prev = prev;
     this.Next = next;
 }