2

記述できる「union」にメソッドを書き込もうとしています。A、B、Cがセットの場合、C = A.union(B)の形式になります。Unionは、セットAとBのすべての要素を含むセットを返しますが、重複するリストは1回だけです。

このメソッドの私のアイデアは、セットAをトラバースし、そのすべての要素をユニオンセットに追加してから、セットBをトラバースします。セットBの要素がすでにユニオンセットに存在する場合は、結果に挿入しないでください。そうでない場合は、すべてユニオンセットに。

3つのリストすべてをメソッドに含めたいので、これは私のような初心者にとっては複雑です(これにはたくさんのエラーがあります)。SLinkedListクラスに要素をチェックして追加するためのメソッドをすでにいくつか作成しましたが、パラメーターはノードからオブジェクトを取得します

/** Singly linked list .*/
public class SLinkedList {

  protected Node head;   // head node of the list
  protected int size;    // number of nodes in the list

  /** Default constructor that creates an empty list */
  public SLinkedList() {
    head = new Node(null, null); // create a dummy head
    size = 0; 

 // add last
  public void addLast(Object data) {
      Node cur = head;
      // find last node
      while (cur.getNext() != null) {
          cur = cur.getNext();
      }
      // cur refers to the last node
      cur.setNext(new Node(data, null));
      size++;
  } 

 // contain method to check existing elements
  public boolean contain (Object target) {
      boolean status = false;
      Node cursor;
      for (cursor = head; cursor != null; cursor = cursor.getNext()) {
          if (target.equals(cursor.getElement())) {
              status = true;
          }       
      }   
      return status;
  }

  public SLinkedList union (SLinkedList secondSet) {
      SLinkedList unionSet = new SLinkedList();
      secondSet = new SLinkedList();
      Node cursor;
      for(cursor = head.getNext(); cursor != null; cursor = cursor.getNext()) {
          unionSet.addLast(cursor.getElement());
          // traverse secondSet, if an element is existed in either set A or union
              // set, skip, else add to union set
          }
      }
    return unionSet;
  }


  }

ノードクラス

/** Node of a singly linked list of strings. */
public class Node {

  private Object element;   // we assume elements are character strings
  private Node next;

  /** Creates a node with the given element and next node. */
  public Node(Object o, Node n) {
    element = o;
    next = n;
  }

  /** Returns the element of this node. */
  public Object getElement() { return element; }

  /** Returns the next node of this node. */
  public Node getNext() { return next; }

  // Modifier methods:
  /** Sets the element of this node. */
  public void setElement(Object newElem) { element = newElem; }

  /** Sets the next node of this node. */
  public void setNext(Node newNext) { next = newNext; }

}

*更新* 問題は、2番目のリストが含まれるpublic SLinkedList union (SLinkedList secondSet)場合、セットBをトラバースし、セットBの要素が結果にすでに存在するかどうかを確認するためにどの構文を使用する必要があるかです。その後、結果に挿入しないでください。そうでない場合は挿入してください。セットBのノードを作成してトラバースする必要がありますか?、unionメソッドの外部で2つのセットを比較するためのcompareメソッドがある可能性がありますか?

助けてください。皆さんありがとう。

4

1 に答える 1

1
SLinkedList unionSet = null; // need a new SLinkedList() here
Node cursor;
for(cursor = head.getNext(); cursor != null; cursor = cursor.getNext()) {
    unionSet.addLast(cursor.getElement()); // NPE because unionSet is null
}
于 2013-01-29T06:51:34.223 に答える