2
여기 방법에게있어 어떤 이유로 목록의 첫 번째 노드를 차단이중 연결리스트를 통해 내 거품 정렬은
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();
}
}
거품 정렬 :
는 다음과 같은 간단한 코드를 사용해보십시오. 날 시작하지 마! –
원래 변수를 반복하지 말고 단지 temp 만 사용해야합니다. 그것이 그것을 참조하기 때문에, 다음에 말하는 것은 현재의 옆에 말하는 것과 같을 것이다. 그런 식으로 머리를 항상 지키고 손길이 닿지 않게하십시오. – Andy
@Andy 미안하지만 당신이 의미하는 바를 얻지 못해. 어떤 원래 변수? –