Modalità di ordinamento per la lista doppiamente collegata
-
13-12-2019 - |
Domanda
Cercando di capire come ordinare la mia lista doppiamente collegata. Ottengo un'eccezione di puntatore nullo qui:
while (temp.getNext()!=null){
.
C'è un approccio migliore o qualsiasi consiglio per ottenere questo andare nel modo giusto?
public void sort() {
//bubble sort!
boolean swapped = (head != null);
while (swapped) {
swapped = false;
EntryNode temp = head;
//can't swap something with nothing
while (temp.getNext()!=null){
if (temp.getLastName().compareTo(temp.getNext().getLastName()) > 0) {
swapped = true;
//special case for two nodes
if (size == 2) {
//reassign head and tail
tail = temp;
head = temp.getNext();
tail.setPrev(head);
head.setNext(tail);
tail.setNext(null);
head.setNext(null);
}
//if swapping is at head
else {
if (temp == head) {
head = temp.getNext();
temp.setNext(head.getNext());
head.getNext().setPrev(temp);
head.setPrev(null);
head.setNext(temp);
temp.setPrev(head);
}
else {
temp.setNext(temp.getNext().getNext());
temp.setPrev(temp.getNext());
temp.getNext().setNext(temp);
temp.getNext().setPrev(temp.getPrev());
}
}
}
//loop through list
temp = temp.getNext();
}
}
}
. Soluzione
Utilizzare Unisci ordinamento Algoritmo, è spesso il scelta migliore per ordinare un elenco collegato (singolo o doppiamente).C'è già un Post discutendo i problemi di implementazione pertinenti.
.Altri suggerimenti
Penso che dovresti controllare:
while(temp != null)
.
Perché stai già assegnando
temp = temp.getNext()
.
Alla fine del ciclo while
.
L'approccio semplice è quello di inserire il contenuto dell'elenco in un array, utilizzare Arrays.sort
per ordinare l'array e infine ricostruire l'elenco dall'array ordinato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow