1

リストから特定の情報をすべて見つけて削除します。(リストを 1 回だけトラバースします。)

リストの最初の番号を削除することができます。つまり、1を選択した場合です。

リストは「1 3 4 6 7」だったので、1 が削除され、本来のようにカウントが 4 に減ります。

public void deleteAll(T deleteItem) {

    LinkedListNode<T> current ; // variable to traverse the list
    LinkedListNode<T> trailCurrent  ; // variable just before current
//  boolean found;



    if (first == null) // Case 1; the list is empty
        System.err.println("Cannot delete from an empty " + "list.");
    else {
        if (first.info.equals(deleteItem)) // Case 2
        {
            first = first.link;

            if (first == null) // the list had only one node
                last = null;
            count--;
        }
    else{
        trailCurrent = first;
        current = first.link;

        while(current != null){
            if(current.info.equals(deleteItem)){
            trailCurrent = current.link;
            count--;
            }
            else
                {
                    trailCurrent = current;
                    current = current.link;
                }
            }

        }
        }
    }
4

3 に答える 3

0

whileループのif句を次のように修正する必要があります

if (current.info.equals(deleteItem)) {
  trailCurrent.link = current.link; // deletes current from list
  current = current.link; // updates current pointer
  count--;
}

ノード B を削除する 3 つのノードのセットの場合

A --> B --> C
|     |
trail curr

トレイルは変更しないでください (A を指します)。ノード B を削除するには、 trail.linkを A から C、つまりcurr.linkに変更する必要があります。さらに、currwhileは、ループの次の反復のために C を指し始める必要があります。

于 2013-07-06T17:07:53.227 に答える
0

コレクション内の要素を削除するときに、ポインターを少し間違って割り当てているようです (最初の要素ではありません)。割り当てを使用してみてください:

trailCurrent.link = current.link;

代わりに:

trailCurrent = current.link;
于 2013-07-06T17:06:13.170 に答える