У меня проблема с моим кодом, я создал класс односвязного списка, в котором вы можете добавлять, удалять, изменять, объединять и т. д., однако я пытаюсь выполнить простую пузырьковую сортировку и столкнулся с проблемами, в которых список не правильно отсортировано. вот некоторые вещи, чтобы отметить:
- это пользовательская реализация связанного списка
- узлы односвязного списка содержат 2 вещи: объект CustomerFile со всеми данными для клиента и указатель «следующий» узел на следующий элемент в списке
- список отсортирован в порядке возрастания (A-Z) по фамилии, хранящейся в клиентском файле каждого узла
- функция добавления записи вставляет узлы в правильное положение в списке, так что список не нужно сортировать изначально - однако, если фамилия изменена, как часть программы, список необходимо сортировать снова
- Я бы предпочел не создавать новый список и повторно использовать эту запись вставки в этом списке, чтобы создать новый список, поскольку это интенсивно использует память, и моя задача - быть максимально эффективной.
- сама структура связанного списка не может быть изменена - это решено и я слишком далеко, чтобы изменить что-то вроде массива
- список имеет головной узел, в нем есть следующие элементы, но нет хвостового узла. Он имеет назначенный NULL следующий указатель, чтобы указать конец списка
код
public static void sortList()
{
if (isEmpty() == true)
{
System.out.println("Cannot sort - the list is empty");
}
else if (getHead().getNext() == null)
{
System.out.println("List sorted");
}
else
{
Node current = getHead().getNext();
CustomerFile tempDat;
boolean swapDone = true;
while (swapDone)
{
current = getHead().getNext();
swapDone = false;
while (current != null)
{
if (current.getNext() != null &&
current.getData().getSurname().compareTo(
current.getNext().getData().getSurname()) >0)
{
tempDat = current.getData();
current.setData(current.getNext().getData());
current.getNext().setData(tempDat);
swapDone = true;
}
current = current.getNext();
}
}
if (getHead().getData().getSurname().compareTo(
getHead().getNext().getData().getSurname()) >0)
{
current = getHead().getNext();
getHead().setNext(current.getNext());
setHead(current);
}
}
}
буду признателен за отзыв