【发布时间】:2012-12-09 11:22:33
【问题描述】:
我的代码有问题,我创建了一个单链表类,您可以在其中添加、删除、修改、合并等...但是,我正在尝试一个简单的冒泡排序,但遇到了以下问题列表未正确排序。这里有一些注意事项:
- 它是一个链表的自定义实现
- 单链表的节点包含两件事:一个包含客户所有数据的 CustomerFile 对象和一个指向列表中下一项的“下一个”节点指针
- 列表按每个节点的客户文件中存储的姓氏升序 (A-Z) 排序
- 添加记录功能将节点插入到列表中的正确位置,因此最初不需要对列表进行排序 - 但是如果更改姓氏,作为程序的一部分,列表需要再次排序
- 我宁愿不创建新列表并在该列表中重复使用此插入记录来创建新列表,因为这会占用大量内存,并且我的任务是尽可能高效
- 链表的结构本身无法更改 - 已决定,我无法更改为数组之类的东西
- 列表有一个头节点,它有下一项但没有尾节点。它有一个指定的 NULL next 指针来指示列表的结尾
代码
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?
-
旧列表“杰伊盖茨比、鲍勃马利、约翰史密斯、齐格星尘”将杰伊盖茨比姓氏更改为“特纳”新列表“鲍勃马利、杰伊特纳、约翰史密斯、齐格星尘”它只循环一次并重新分配一个节点
-
姓氏存储为大写字母,不区分大小写
标签: java bubble-sort singly-linked-list