Вот метод
public void sortStudentsAlphabeticallyByFirstName()
{
StudentNode unsorted = tail;
StudentNode current = header;
while(unsorted.prevNode() != null)
{
while(current != unsorted)
{
int result = (current.getFirstName()).compareToIgnoreCase(current.nextNode().getFirstName());
if(result > 0) //If in wrong order lexicographically
{
StudentNode temp = current;
StudentNode next = current.nextNode();
StudentNode previous = current.prevNode();
StudentNode nextNext = next.nextNode();
if (numberOfStudents() == 2)
{
current = current.nextNode();
current.setNext(temp);
temp.setPrev(current);
temp.setNext(null);
current.setPrev(null);
unsorted = temp;
}
else if(nextNext == null) //If at penultimate student therefore last comparison
{
current = current.nextNode();
current.setNext(temp);
temp.setPrev(current);
temp.setNext(null);
previous.setNext(current);
current.setPrev(previous);
unsorted = temp;
}
else if(previous == null) //if at beginning of student list
{
if(current.nextNode() == unsorted)
{
current = current.nextNode();
current.setNext(temp);
temp.setPrev(current);
temp.setNext(nextNext);
nextNext.setPrev(temp);
current.setPrev(null);
unsorted = temp; //swap unsorted back to correct position
}
else
{
current = current.nextNode();
current.setNext(temp);
temp.setPrev(current);
temp.setNext(nextNext);
nextNext.setPrev(temp);
current.setPrev(null);
}
}
else //else if in the middle of the list
{
if(current.nextNode() == unsorted)
{
current = current.nextNode();
current.setNext(temp);
temp.setPrev(current);
temp.setNext(nextNext);
nextNext.setPrev(temp);
previous.setNext(current);
current.setPrev(previous);
unsorted = temp;
}
else
{
current = current.nextNode();
current.setNext(temp);
temp.setPrev(current);
temp.setNext(nextNext);
nextNext.setPrev(temp);
previous.setNext(current);
current.setPrev(previous);
}
}
}
current = current.nextNode();
}
current = header;
unsorted = unsorted.prevNode();
}
}
Кто-нибудь может понять, почему он обрезает начало списка, когда я пытаюсь повторить список снова?Я использовал отладчик, и он, кажется, работает так, как должен, но я не могу понять, почему он это делает.
Вот и метод итеративного списка, если он помогает
public void itterateList()
{
StudentNode u = header;
while(u != null)
{
System.out.println(u.getFirstName()+" "+u.getSurname());
u = u.nextNode();
}
}