我有一个代码问题,我已经制作了一个单向链表类,可以添加、删除、修改、合并等操作。但是,我尝试进行简单的冒泡排序时遇到了问题,列表没有正确排序。以下是需要注意的几点:
- 这是一个自定义的链表实现。
- 单向链表的节点包含两个部分:一个CustomerFile对象,其中包含客户的所有数据,以及指向列表中下一项的“next”节点指针。
- 列表按照每个节点中存储的姓氏按升序(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);
}
}
}
我希望得到您的反馈意见。
14358 -> 14358?
14358 -> 13485?
14358 -> 81345? - Mike Rylander