1

順序付けされておらず、によって定義されたトレーラーノードを持つリンクリストを作成するための add メソッドがあります。

 ListNode<E> front = new ListNode<E>(null,null);

私が理解していることから、リストの先頭に値を追加し続けることができますが、これはセットのリンクされたリストの実装であり、重複する値を持つことはできないため、セットをチェックする必要があります(先頭からトレーラーまでの各リストノードノード) リストに追加しようとしている新しい値がないことを確認します。これが私の追加方法です。

public boolean add(E e) {

  ListNode<E> newNode = new ListNode<E>(e, null);

      //point to trailer      
      newNode.next = front.next;
      //front now points to newNode
      front.next = newNode;
      //front->newNode->trailer

       objectCount++;

        return true;

}

ここで、newNode がまだリンク リストにないことを確認するには、リスト内の各要素をチェックし、リンク リストにある場合は true を返す contains メソッドを実装する必要があります。true を返す場合は、上記の add メソッドを実行せず、実行しない場合は値を正常に追加します。だから、私は次の行に沿って何かを考えていました:

 if(this.contains(newNode))
   return false;
 else {
   newNode.next = front.next;
   front.next = newNode;
  }

しかし、contains メソッドを正常に実装する方法がわかりません。私が持っているものは次のとおりです。

public boolean contains(Object o) {
   ListNode<E> o1 = (ListNode<E>) o;
  if (o1.value == front.next.value)
          return true;
      else
          return false;
}

メソッドを含むようにする方法がわかりません。オブジェクト o の各ノードをチェックし、リンクされたリストにある場合は true を返し、それ以外の場合は false を返します。それで、今後、これをどのように実装すべきかについての私の理解は正しいですか?また、contains メソッドを修正するにはどうすればよいですか?

4

1 に答える 1

2

すべてのノードは、その前と後ろを知っています。したがって:

以前のすべてのノードを調べて、もう誰もいなくなるまで、それらを確認します。

次のすべてのノードを調べて、誰もいなくなるまでチェックします。

(コードなしの演習のように聞こえますが、書かれた単語をコードに「翻訳」する必要があるためです)

--tb

于 2012-10-25T16:28:46.710 に答える