まず、我々は、リンクされたリストの基本構造を作成し、クラスがプライベート内部クラスノードを持っている、その理由は、外部の詳細を隠すためにプライベートに設定され、内部のNodeオブジェクトおよびノードのノードがあり、ノードこのノードは、現在のノードがありますあなたはこのような構造の利点を取ることができたノードは、チェーンリンク一緒ノードと同じになります
パブリック クラス LinkedListは<E> { プライベート クラスノード{ 公共EのE; 公共次のノード。 パブリックノード(E、E、ノード次){ この .E = E。 この .next = 次回。 } パブリックノード(E、E){ この(E、NULL ); } パブリックノード(){ この(NULL、NULL ); } @Override パブリック文字列のtoString(){ 戻りe.toStringを(); } } // 最初のノードが仮想提供されるより便利な操作のノードのための 専用ノードdummyHead; プライベート int型のサイズ、 パブリックLinkedListの(){ dummyHead = 新しい新しいノードを(); サイズ = 0 ; } // のリスト内の要素の数を取得 公衆 INT のgetSize(){ 戻りサイズ; } // 戻りリストが空であるかどうかを パブリック ブールのisEmpty(){ 戻りサイズ== 0 ; } }
、addメソッドで追加操作のリストの次の実現、
// リンクリストのノードに新しいノードが挿入された 公共 のボイドの追加(int型のインデックス、E E){ IF(インデックス<0 ||インデックス> サイズ) スロー 新しい新はIllegalArgumentException(「インデックス法的ません」;) ノードPREV = dummyHead ; のための(INT ; I <インデックスi ++ I = 0 ) PREV = prev.next; prev.next = 新しい新しいノード(E、prev.next); サイズ ++ ; }
多重化方法は、挿入ノードリストに追加する頭尾を実現することができます
// 新しいリストの先頭要素eの追加 パブリックが 無効addFirstを(E、E){ 追加( 0 、e)は; } // リストの末尾に新たな要素eを追加 公共 ボイドaddLast(E、E){ 追加(サイズ、E) ; }
あるノードオブジェクト内のアクセス方法を実現する、方法を取得します
公共 Eは、get(int型のインデックス){ 場合(インデックス<0 ||インデックス> = サイズ) スロー 新しい例外:IllegalArgumentException( "インデックス不合法を。" ); ノードCUR = dummyHead.next。 以下のために(INT iが= 0; I <インデックス、I ++ ) CUR = cur.next。 リターンcur.e。 }
オブジェクトのget頭と尾のノードを達成するためのgetの方法を多重化する方法
// のリストの最初の要素を取得 公衆E getFirstと(){ 戻り GET(0 ); } // 最後の要素のリストを取得 公共E GetLastの(){ 戻り GET(サイズ- 1。); }
オブジェクトがノードに設定されている内のメソッドセットは、実装しました
公共 無効セット(int型のインデックス、E電子){ 場合(インデックス<0 ||インデックス> = サイズ) スロー 新しい、IllegalArgumentExceptionを( "設定に失敗しました不正なインデックスを。。" ); ノードCUR = dummyHead.next。 以下のために(INT iが= 0; I <インデックス、I ++ ) CUR = cur.next。 cur.e = E; }
実現には、リストに要素が含まれている参照、メソッドが含まれています
// リンクリスト要素Eがあるかどうかを見つける 公共 ブールが含まれている(E電子){ ノードCUR = dummyHead.next、 しばらく(!CUR = ヌル){ IF (cur.e.equals(E)) のリターン をtrueに、 CUR = CUR。次; } リターン falseに; }
長い前のノードは、ノードが見つかり、その後、次のノードへのポイントノードは、ノードを削除する前に、その回復は、JVMことができるように最終的に次の空白ノードを削除する削除するようとして、removeメソッドを実装
公共 E削除(int型のインデックス){ 場合(インデックス<0 ||インデックス> = サイズ)が スロー 新しい、IllegalArgumentExceptionを( "インデックス不合法。" ); ノードPREV = dummyHead。 以下のために(INT iが= 0; I <インデックス、I ++ ) PREV = prev.next。 ノードretNode = prev.next。 prev.next = retNode.next。 retNode.next = nullを。 サイズ - ; 返すretNode.eを。 }
この構造体のリストで見つけることができます、我々は完全なリストを達成した後は、ときにのみ、ヘッドノードの操作は非常に効率的であり、そして我々は、スタックを達成するために、リストを使用することができますので、この機能は特に、非常にフィットスタックです