Вероятно, ваша проблема здесь:
while ((leftPos.data).compareTo(pivot) > 0) {
leftPos = leftPos.next;
}
while ((pivot).compareTo(rightPos.data) > 0) {
rightPos = rightPos.prev;
}
Вы не проверяете, есть ли leftPos next или rightPos имеет предыдущие версии. Так что если ваш leftPos последний, то leftPos.next будет нулевым, и на следующей итерации цикла while вы попытаетесь получить leftPos.data - здесь вы получите NullPointer.
Вам следует проверить, является ли next или prev нетnull:
while ((leftPos.data).compareTo(pivot) > 0 && leftPos.next!=null) {
leftPos = leftPos.next;
}
while ((pivot).compareTo(rightPos.data) > 0 && rightPos.prev!=null) {
rightPos = rightPos.prev;
}