コードに問題があります。追加、削除、変更、マージなどを行う単一リンク リスト クラスを作成しましたが、単純なバブル ソートを試みているところ、リストが正しくソートされていません。以下に注意事項を示します。
- リンクリストのカスタム実装です
- シングル リンク リストのノードには、顧客のすべてのデータを含む 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);
        }
    }
}
フィードバックをいただければ幸いです