コードに問題があります。追加、削除、変更、マージなどを行う単一リンク リスト クラスを作成しましたが、単純なバブル ソートを試みているところ、リストが正しくソートされていません。以下に注意事項を示します。
- リンクリストのカスタム実装です
- シングル リンク リストのノードには、顧客のすべてのデータを含む CustomerFile オブジェクトと、リスト内の次の項目への「次の」ノード ポインタの 2 つが含まれます。
- リストは、各ノードの顧客ファイルに保存されている姓の昇順 (AZ) でソートされます。
- レコード追加機能は、リストの正しい位置にノードを挿入するため、最初にリストをソートする必要はありません。ただし、プログラムの一部として姓が変更された場合は、リストを再度ソートする必要があります。
- 新しいリストを作成せず、そのリストでこの挿入レコードを再利用して新しいリストを作成します。これはメモリを集中的に使用するため、私のタスクはできるだけ効率的にする必要があるためです。
- リンクされたリストの構造そのものを変更することはできません-決定されており、配列などに変更するには遠すぎます
- リストにはヘッド ノードがあり、次の項目がありますがテール ノードはありません。リストの終わりを示すために指定された 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);
}
}
}
フィードバックをいただければ幸いです