リンク リスト クラスの非常に簡単なメソッドを作成する必要がありますが、いくつか問題があります。と呼ばれるこのメソッドは、squish()
このリストを取得し、( を使用して比較して) 2 つ以上の連続する項目が等しい場合equals()
は、重複するノードを削除して、連続するコピーが 1 つだけ残るようにします。したがって、このリスト内の 2 つの連続する項目は、手順の完了時に等しくなりません。
実行後squish()
、リストはsquish()
開始時よりも短くなる可能性があります。削除されたものを補うために余分なアイテムが追加されることはありません。
たとえば、入力リストが の[ 0 0 0 0 1 1 0 0 0 3 3 3 1 1 0 ]
場合、出力リストは[ 0 1 0 3 1 0 ]
です。
これは私の方法です:
public void squish() {
SListNode current = head;
boolean end =false;
while(end == false )
{
if(!current.item.equals(current.next.item))
current=current.next;
else
{
while(current.item.equals(current.next.item) && current.next !=null)
current.next=current.next.next;
current=current.next;
}
if (current==null)
end=true;
}
}
これはコードを実行するための小さなメインです。
public class main {
public static void main(String args[])
{
int[] test6 = {6, 6, 6, 6, 6, 3, 6, 3, 6, 3, 3, 3, 3, 3, 3};
SList list6 = new SList();
for (int i = 0; i < test6.length; i++) {
list6.insertEnd(new Integer(test6[i]));
}
System.out.println("squishing " + list6.toString() + ":");
list6.squish();
String result = list6.toString();
System.out.println(result);
int[] test5 = {3, 7, 7, 7, 4, 5, 5, 2, 0, 8, 8, 8, 8, 5};
SList list5 = new SList();
for (int i = 0; i < test5.length; i++) {
list5.insertEnd(new Integer(test5[i]));
}
System.out.println("squishing " + list5.toString() + ":");
list5.squish();
result = list5.toString();
System.out.println(result);
}
}
コードをデバッグすると、メソッドが正常に機能することがわかります..リストの最後でのみ、null 例外ポインターを返します。手伝って頂けますか?ありがとう