@Override
	public List<E> insert(E d) {

		if (this.isEmpty()) {
			super.insert(d);
		} else {
			this.setFirst();

			// New item is the smallest item so far
			if (list.data.compareTo(d) > 0) {
				insertFirst(d);
				return this;
			}

			// Find the item where the new item should be placed after
			while (list.next != null && list.next.data.compareTo(d) < 0) {
				list = list.next;
			}

			if (this.list.next == null) {
				// New item is the largest so far
				insertLast(d);
			} else {
				insertInOrder(d);
			}
		}
		return this;
	}