2017-02-18 6 views
0

Javaを使用して、私はリンクされたLListクラスとLLNodeクラスを持っています。私は、リンクされたリストから要素を除いて新しいリンクされたリストを返すことによって、その要素を削除しようとしています。基本的に、リストに特定の要素が含まれていない場合はそれを返しますが、新しい要素を作成する場合は返します。私は現在のリストを反復して要素eが含まれているかどうかを確認します。特定の要素を持たないリストを作成する方法は正確にはわかりません。リンクされたリスト、新しいリストを返すことによって要素を削除する

public LList<T> remove(T t) { 
    if (this.contains(t)) { 
     LList<T> newList = new LLSet<>(this.head); 
     newList.head = new LLNode<>(, this.head); 

     return newList; 
     } 

     return this; 
     } 

答えて

0

私はLListとLLNodesが自分のクラスであると仮定しています。 最初の質問は、同じリストから要素を削除して返すことができるのであれば、なぜ新しいリストを返すのですか? リンクされたリストにノードがリンクされているため、おそらく 1.リストを1つずつトラバースして 2.メソッドで渡された要素を削除します。

本当に新しいリストを返すことでこれを達成したい場合は、以下は、あなたがしなければならないものです、 1.あなたがループ内で削除したい要素をスキップ古いリスト 3からの要素を持つ新しいリストを 2.反復古いリストの上に新しいリストを作成し、記入

私の提案は、新しいリストを作成するのではなく、既存のリストを変更しないでください。それはLinkedListを持つ利点です。

0

新しいノードを使用して新しいリストを作成する必要があります。ノードを共有しようとすると、両方のリストに変更が加えられます。

私はシンプルなwhileループが新しいリストを作成するために使用することができると思います。

public LList<T> remove(T t) { 
    LList<T> newList = new LList<>(); 
    LLNode<T> current = this.head; 
    while (current != null) { 
     if (!current.element.equals(t)) { 
      newList.add(t) 
     } 
    } 
    return newList; 
} 

これは実際にあなたが必要な機能である、とあなたはメソッド名を変更する自由を持っている場合は、私が呼び出しをお勧めしますそれは​​です。ほとんどの人は、remove(T t)が呼び出されたリストを変更すると予想します。

0

あなたのremoveメソッドがLListクラスにあると仮定します。試してみてください:

public LList<T> remove(T t) { 

    LLNode curr = this.head; 
    LLNode prev = null; 

    while(curr != null) { 

     if (curr.equals(T)) { 
      prev.setNext(curr.next()); 
      return this.head; 
     } 

     prev = curr; 
     curr = curr.next(); 
    } 

    return this.head; 
} 
関連する問題