1

結果のリストもソートされるように、特定のデータを既にソートされた循環リンクリストに追加したいと考えています。クラス メンバーとしてとを持つのクラスNodeは既に提供されています。public int datapublic Node next

addNode(Node head)既知の data(9) をリストに挿入する関数が実装されます。Node head循環リンクリストのヘッドポインタです。

以下のケースを検討しました

  1. リストが空の場合、ノードを作成し、そのデータを 9 として配置し、その次を参照します。新しく作成したノードをヘッドにします。

  2. リストに項目が 1 つしか含まれていない場合。最初のノードの次のポインターを新しいノードを指すように変更し、新しいノードの次のポインターを特定のヘッド ノードを指すように変更します。値が最も低いノードをヘッド ノードが指すようにします。

  3. 挿入されたデータがすべての中で最小の場合、つまり、ヘッド ノードが指すノードのデータよりも小さくなり、ヘッド ノードの前に挿入されます。

  4. 2 つのノード間でデータを挿入する場合。そのため、新しいデータが挿入される前のノードを見つける while ループを使用し、それに応じてノードの次のポインターを変更しています。

コードを送信すると、なぜか 1 つのテスト ケースが失敗し、それを見つけることができません。誰かが私の論理で見落としている可能性のある状態を見つけるのを手伝ってくれますか.

以下は実装されたコードです。

public static Node addElement(Node input1)
{
    //Write code here
Node result = new Node();
Node current = new Node();
current = input1;

Node value = new Node();
value.data = 10;

if(current == null){
    value.next = value;
    result = value;
}
else if(current.next == current){
    value.next = input1;
    current.next = value;
    result = current.data < value.data ? current : value;
}
else if(value.data < current.data){
    while(current.next != input1)
        current = current.next;     

    current.next = value;
    current.next.next = input1;
    result = current.next;
}   
else{
    while(current.next != input1 && current.next.data <= value.data)
        current = current.next;

    Node currentNext = current.next;
    current.next = value;
    current.next.next = currentNext;
    result = input1;
}

return result;
}
4

1 に答える 1