public boolean add(K key, V val){
		int k = makeOrdinaryKey(key);
		while(true){
			Window window = find(head, k);
			Node pred = window.pred, curr = window.curr;
			if(curr.key == k){
				return false;
			}else{
				Node node = new Node(key, val);
				node.next = new AtomicMarkableReference<Node>(curr, false);
				if(pred.next.compareAndSet(curr,  node, false, false)){
					return true;
				}
			}
		}
	}