Пример #1
0
        public static bool IsCircular(DoublyLinkedListNode <T> head)
        {
            // 필터링 하면서 내려가면서 마지막까지 없으면 false
            if (head is null)
            {
                return(true);
            }

            var current = head;

            for ( ; current != null;)
            {
                current = current.Next;
                if (current == head)
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #2
0
        public void Add(DoublyLinkedListNode <T> newNode)
        {
            if (_head is null)
            {
                _head      = newNode;
                _head.Next = _head;
                _head.Prev = _head;
            }
            else
            {
                var current = _head;
                var tail    = _head.Prev;
                // urrent.Next이 for문을 돌 때마다
                // 1. 현재 값의 다음 값을 계속 불러온다.


                // 추가할 때 양 방향 연결
                current.Prev = newNode;
                tail.Next    = newNode;
                newNode.Prev = tail;
                newNode.Next = current;
            }
        }
Пример #3
0
        public void Remove(DoublyLinkedListNode <T> removeNode)
        {
            if (_head is null || removeNode is null)
            {
                return;
            }

            if (removeNode == _head)
            {
                removeNode = _head.Next;
                if (_head != null)
                {
                    _head.Prev = null;
                }
            }
            else
            {
                removeNode.Prev.Next = removeNode.Next;
                removeNode.Next.Prev = removeNode.Prev;
            }

            removeNode = null;
        }
Пример #4
0
 public bool IsHeadNull(DoublyLinkedListNode <T> head)
 {
     return(_head is null);
 }