public void rearangeAround(T value) {
		Node<T> lessTail = null;
		Node<T> lessRoot = null;
		Node<T> moreTail = null;
		Node<T> moreRoot = null;
		Node<T> node = root;
		Node<T> prev = null;
		while (node != null) {
			Node<T> nextNode = node.next;
			if (node.value.compareTo(value) != 0) {
				if (prev == null) {// root
					root = node.next;
				} else {
					prev.next = node.next;
				}
			}
			if (node.value.compareTo(value) > 0) {
				if (moreRoot == null) {
					moreTail = moreRoot = node;
				} else {
					moreTail.next = node;
				}
			} else if (node.value.compareTo(value) < 0) {
				if (lessRoot == null) {
					lessTail = lessRoot = node;
				} else {
					lessTail.next = node;
				}
			} else {
				prev = node;
			}
			node = nextNode;
		}
		lessTail.next = root;
		root = lessRoot;
		prev.next = moreRoot;
		tail = moreTail;
	}