2

各要素(ファーストネーム、ミドルネーム、ラストネーム)に複数の文字列値を保持する単一リンクリストを実装して、要素内のさまざまなストリングを並べ替えて検索できるようにしようとしています(ラストネームで並べ替え、ミドルネームを検索)など)。

3つの文字列(最初、中間、最後)と各文字列のオブザーバーメソッドを保持するNameクラスを作成しました。

誰かが私のMergeSortを変更して、名前(Name.getLastName())で並べ替えるのを手伝ってもらえますか?私がそれを理解することができれば、ミドルネームによる検索方法を作成するための正しい軌道に乗るはずです。

前もって感謝します!

public class SinglyLinkedList {

  private class Link {

    public Name data;
    public Link next;

    Link(Name data) 
    {
        this(data, null);
    }

    Link(Name d, Link n) 
    {
        data = d;
        next = n;
    }

  }

  private Link first_;

  // Creates an empty list
  public void List() 
  {
      first_ = null;
  }

// Returns true iff this list has no items
  public boolean isEmpty() 
  {
      return first_ == null;
  }

// Data is put at the front of the list

  public void insertFront(Name data) 
  {
      first_ = new Link(data, first_);
  }

// Removes first element
  public String removeFront() 
  {     
        Name data = first_.data;
        first_ = first_.next;
        return data;

  }

  public Link MergeSort(Link headOriginal)
  {

    if (headOriginal == null || headOriginal.next == null)
    {
        return headOriginal;
    }

    Link a = headOriginal;
    Link b = headOriginal.next;

    while ((b != null) && (b.next != null))
    {
        headOriginal = headOriginal.next;
        b = (b.next).next;
    }

    b = headOriginal.next;

    headOriginal.next = null;

    return merge(MergeSort(a), MergeSort(b));

  }

  public Link merge(Link a, Link b)
  {
      Link temp = new Link();
      Link head = temp;
      Link c = head;

      while ((a != null) && (b != null))
      {

          if (a.item <= b.item)
          {
              c.next = a;
              c = a;
              a = a.next;
            }
            else
            {
                c.next = b;
                c = b;
                b = b.next;
            }
        }

        c.next = (a == null) ? b : a;

        return head.next;
    }
} 
4

1 に答える 1

5

各要素(First、Middle、Last Name)に複数の文字列値を保持するために単一リンクリストを実装しようとしています

しないでください。PersonalName3つの文字列メンバーを持つ論理型(例:a)について説明しました。したがって、そのタイプを別のタイプとして作成します。Deque<PersonalName>次に、またはなど、通常の組み込みコレクションのいずれかを使用できますList<PersonalName>。(リンクリストが必要な特別な理由はありますか?)

常に同じ長さで、各値に対して常に同じ明確に指定された意味を持つ値のコレクションを見つけたときはいつでも、それをカプセル化するタイプを作成することを強く検討してください。

于 2012-10-22T16:56:02.407 に答える