@Override
	public void insert (K i) {
		if(i == null)
			return;

		if(contains(i))
			return;
		
		if(root == null) {
			root = new Node<K, V>(i, null, null);
			size++;
			return;
		}

		Node<K, V> cur = this.root;
		
		if(!cur.getKey().shorter(i)) {
			root = new Node<K, V>(i, null, cur);
			cur.setPrev(root);
			size++;
			return;
		}
		
		while(cur.getNext() != null) {
			if (!cur.getKey().shorter(i)) {
				cur = cur.getPrev();
				break;
			}
			cur = cur.getNext();
		}

		Node<K, V> temp = new Node<K, V>(i, cur, cur.getNext());
		
		cur.setNext(temp);

		if(cur.getNext() != null)
			cur.getNext().setPrev(temp);
		
		size++;
	}