///
        ///<summary>The remove method takes a CacheNode type input cacheNode. If cacheNode has a previous node, then
        /// assigns cacheNode's next node as previous node's next node. If cacheNode has not got a previous node, then
        /// assigns its next node as head node. Moreover, if cacheNode has a next node, then assigns cacheNode's
        /// previous node as next node's previous node; if not assigns tail node's previous node as tail. By doing so
        /// it removes the cacheNode from doubly {@link java.util.LinkedList}.</summary>
        ///
        ///<param name="cacheNode"> {@link CacheNode} type input to remove.</param>
        ///
        public void Remove(CacheNode <TKey, TData> cacheNode)
        {
            var previous = cacheNode.GetPrevious();
            var next     = cacheNode.GetNext();

            if (previous != null)
            {
                previous.SetNext(next);
            }
            else
            {
                _head = _head.GetNext();
            }

            if (next != null)
            {
                next.SetPrevious(previous);
            }
            else
            {
                _tail = _tail.GetPrevious();
            }
        }