Не выводит положительные числа. Односвязный список
В моем односвязном списке сортируются элементы в таком порядке: отрицательные, нулевые и положительные.
Проблема в том, что положительные элементы не выводятся, когда отрицательные и нулевые выводятся в полном порядке. К примеру, есть массив int[] arr = {0,-1,2,9}
, его элементами я заполняю свой односвязный список, выводится [-1,0], хотя должно быть так: [-1,0,2,9].
Прилагаю метод, в котором реализуется сортировка, полагаю, что ошибка в нем. Решаю через три других списка, для каждого свои элементы.
public void rearrangeList()throws SimpleLinkedListException {
if (head == null || head.next == null) {
return;
}
SimpleLinkedListNode<T> minusHead = null; // голова списка отрицательных элементов
SimpleLinkedListNode<T> minusTail = null; // хвост списка отрицательных элементов
SimpleLinkedListNode<T> zeroHead = null; // голова списка нулевых элементов
SimpleLinkedListNode<T> zeroTail = null; // хвост списка нулевых элементов
SimpleLinkedListNode<T> plusHead = null; // голова списка положительных элементов
SimpleLinkedListNode<T> plusTail = null; // хвост списка положительных элементов
SimpleLinkedListNode<T> current = head;
while (current != null) {
SimpleLinkedListNode<T> next = current.next;
current.next = null; // отсоединяем текущий элемент от списка
if ((Integer)current.value < 0) {
if (minusHead == null) {
minusHead = current;
} else {
minusTail.next = current;
}
minusTail = current;
}
if ((Integer)current.value == 0) {
if (zeroHead == null) {
zeroHead = current;
} else {
zeroTail.next = current;
}
zeroTail = current;
}
if ((Integer)current.value > 0){
if (plusHead == null) {
plusHead = current;
} else {
plusTail.next = current;
}
plusTail = current;
}
current = next;
}
if (minusHead != null) {
head = minusHead;
minusTail.next = zeroHead != null ? zeroHead : plusHead;
} else if (zeroHead != null) {
head = zeroHead;
zeroTail.next = plusHead;
} else {
head = minusHead;
}
}
Источник: Stack Overflow на русском