public void Push(K key, T item)
        {
            var cur = _header;

            for (int i = 0; i < _size; i++)
            {
                if (cur.Key.CompareTo(key) == 0)
                {
                    throw new ArgumentException("An item with the same key has already been added");
                }
                cur = cur.Next;
            }
            NodeWithKey <K, T> node = new NodeWithKey <K, T>(key, item);

            if (_size == 0)
            {
                _header  = node;
                _trailer = node;
            }
            else
            {
                _trailer.Next = node;
                _trailer      = node;
            }
            _size++;
        }
        public void Remove(K key)
        {
            if (_size == 0)
            {
                return;
            }
            if (key.CompareTo(_header.Key) == 0)
            {
                _header = _header.Next;
                _size--;
                return;
            }
            bool check             = false;
            var  cur               = _header;
            NodeWithKey <K, T> pre = null;

            for (int i = 0; i < _size; i++)
            {
                pre = cur;
                cur = cur.Next;
                if (cur.Key.CompareTo(key) == 0)
                {
                    check = true;
                    break;
                }
            }
            if (check)
            {
                pre.Next = cur.Next;
                if (key.CompareTo(_trailer.Key) == 0)
                {
                    _trailer = pre;
                }
                cur = null;
                _size--;
            }
        }