public Window<T> find(LockFreeElement<T> headd, T value) {
		LockFreeElement<T> pred = null, curr = null, succ = null;
		boolean[] marked = {false};
		boolean snip;
		retry: while (true) {
			pred = headd;
			curr = pred.getNext().getReference();
			while (true) {
				succ = curr.getNext().get(marked);
				while (marked[0]) {
					snip = pred.getNext().compareAndSet(curr, succ, false, false);
					if (!snip) continue retry;
					curr = pred.getNext().getReference();
					succ = curr.getNext().get(marked);
				}
				if ((!curr.isHead()) && (curr.isTail() || curr.getValue().compareTo(value) >= 0)) {
					return new Window<T>(pred, curr);
				}
				pred = curr;
				curr = succ;
			}
		}
	}