public V remove(K key){
		int k = makeOrdinaryKey(key);
		boolean snip;
		while(true){
			Window window = find(head, k);
			Node pred = window.pred, curr = window.curr;
			if(curr.key != k){
				return null;
			} else{
				Node succ = curr.next.getReference();
				snip = curr.next.compareAndSet(succ, succ, false, true);
				if(!snip)
					continue;
				pred.next.compareAndSet(curr, succ, false, false);
				return curr.val;
			}
		}
	}