Я занимаюсь инвентаризационной системой библиотеки, поэтому я должен был сортировать имя внутри Узла в алфавитном порядке. У меня есть имя книги, автор, номер isbn, количество копий и жанр, вся эта информация, которую я храню внутри класса.Как отсортировать связанный список в алфавитном порядке с помощью Java?
Я написал код для его сортировки в алфавитном порядке, но это не сработало. Может ли кто-нибудь сказать мне, что случилось в моем коде?
Вот мой Linked класс Список содержит вставки и способ отображения:
public class LinkedList
{
Node node = new Node();
static Node head;
public LinkedList()
{
head=null;
}
public Node getHead()
{
return head;
}
public static void addNode(Data data)
{
Node newNode = new Node(data, head);
if (head == null) {
head = newNode;
newNode.setNext(null);
} else {
Node next = head;
Node prev = next;
do {
if (data.name.compareTo(next.data.name) < 0) {
break;
}
prev = next;
next = next.getNext();
} while (next != null);
newNode.setNext(next);
if (data.name.compareTo(next.data.name) < 0) {
head = newNode;
} else prev.setNext(newNode);
}
}
public static String displayNode()
{
Node current = head;
String output = "";
while(current != null){
output+=current.data.toString();
current = current.next;
}
return output;
}
Вот мой Узла класс:
public class Node
{
Data data;
Node next;
public Node()
{
next = null;
}
Node(Data data, Node next)
{
this.data = data;
this.next = next;
}
public Object getData()
{
return data;
}
public Node getNext()
{
return next;
}
public void setNext(Node next)
{
this.next=next;
}
}
Вот мой класс данных:
public class Data {
LinkedList list;
String name;
String author;
int isbn;
int number;
String genre;
public Data(String name, String author, int isbn, int number, String genre)
{
this.name = name;
this.author = author;
this.isbn = isbn;
this.number = number;
this.genre = genre;
}
public String toString()
{
return("Book Name: "+name+"\nAuthor: "+author+"\nISBN Number: "+isbn+"\nNumber of Copies: "+number+"\nGenre: "+genre+"\n\n");
}
public String getName()
{
return name;
}
Здесь мой класс Iterator, который я использовал для отображения списка:
public class DisplayIterator
{
LinkedList list;
static Node current;
static Node newNode;
DisplayIterator(Node newNode)
{
this.newNode = newNode;
current = list.head;
}
public static boolean hasNext()
{
if(current == null){
return false;
}
else if (current.next == null){
return false;
}
return true;
}
public static Node next()
{
if(hasNext()){
current = current.next;
}
return current;
}
public static void remove(){
throw new UnsupportedOperationException("It is read-only.");
}
}
спасибо.
вы добавляете не в верхней части списка без всякого порядка. Ваш цикл * while * выполняется только в связанном списке до его заказа. Если вы хотите отсортировать связанный список, вы должны добавить новый узел в нужное место, но не всегда вверху. Но, если я могу спросить, почему вы не используете * Collection *? –
Любая причина, по которой вы изобретаете велосипед? Используйте интерфейс TreeSet и Comparable или Comparator. Они делают то же самое, но являются частью Java Lib. – brummfondel
Конечно, он должен использовать 'Collection', но я предполагаю, что для назначения требуется написать реализацию связанного списка. –