-2

私はJavaを使用しており、二重リンクリストからの削除メソッドを実装しようとしていますが、苦労していて、どのように進めるかがわかりません。このメソッドは、リスト内の特定のノードに格納されているデータを削除します。削除される要素が開始または終了である場合を考慮する必要があることを読みましたが、どうすればよいかわかりません。一般的に、これが正しい方法であるかどうかはわかりません。私のコード/進捗状況は以下に掲載されています。何か助けていただければ幸いです。ありがとう

PSクラス内に開始参照と終了参照、およびサイズ参照があります

 public type removeAtTheIndex(int index) 
  {
     type theData = null;
    Node <type> current= start;
    Node temp= new Node();
    if (index >= 0 && index < size && start !=null)
    {

        for (int i=0; i < index && current.getNext()!= null; i++)
        {
            current=current.getNext();
        }
        if (current != null)
        {
        if (current == start)
        {

        }

        else if (current == end)
        {

         }

        else
        {
            theData= current.getData();
            temp= current.getPrev();
            temp.setNext(current.getNext());
            current.getNext().setPrev(temp);
            current.setData(null);
            size--;

        }

    }

    return theData;
}
4

1 に答える 1

1

に変更しtypeましたType。Javaでは、クラス名に小文字を使用することはお勧めしません。あなたが何が起こっているのか理解してくれることを願って、たくさんのコメントを追加しました。

これはテスト済みのコードではないことに注意してください。そこにバグが見つかるかもしれませんが、プロセスの本質はそこにあると私は確信しています。

public Type removeAtTheIndex(int index) {
  // I want to return the data that was removed.
  Type theData = null;
  // Sanity checks.
  if (index >= 0 && index < size && start != null) {
    // Find the entry with the specified index.
    Node<Type> current = start;
    for (int i = 0; i < index && (current = current.getNext()) != null; i++) {
    }
    // Did we find it?
    if (current != null) {
      // Yes! Gather the contents.
      theData = current.getData();
      // Clear it.
      current.setData(null);
      // Special?
      if (current == start) {
        // Its the start one.
        start = start.getNext();
        // Detach it.
        start.setPrev(null);
      } else if (current == end) {
        // Step end back one.
        end = end.getPrev();
        // Detach it.
        end.setNext(null);
      } else {
        // Remove from within list.
        Node prev = current.getPrev();
        // Point it at my next.
        prev.setNext(current.getNext());
        // Point my next to new prev.
        current.getNext().setPrev(prev);
      }
      // One less now.
      size--;
    }
  }
  return theData;
}
于 2012-11-14T10:11:25.227 に答える