単独リンクリスト:配列よりも効率的に削除挿入
// ノードノード作成 クラスをノード{ コンストラクタ(データ){ この .DATA = データ; この .next = NULL ; } } クラスリスト{ コンストラクタ(){ // 最初のノードへと呼ばれる属性ヘッダポイントを定義 この .head = NULL ; // の長さ この .LENGTH = 0 ; } // ノード追加 アペンド(素子){ // 値がノードに変更され newNode =せて新しい新しいノード(要素); // 決定リストが空であるか否かを 場合(本.head == NULL ){ この .head = newNode。 } 他{ 電流せ = この.headと、 一方、(!current.next = NULL ){ // 如何将電流后移 電流= current.next } current.next = newNode。 } // 长度必须加1 本 .LENGTH ++ ; } のisEmpty(){ 場合(この .head == NULL){ 戻り 真。 } を返す 偽。 } クリア(){ この .head = NULL この .LENGTH = 0 } サイズ(){ 戻り 、この.LENGTHを } {のtoString(コールバック) 現在せ = この.head。 一方、(現在の){ コールバック(current.data)。 電流 = current.next } } // 在任意位置添加一个节点/元素 インサート(位置、要素){ // 範囲決定のうちする 場合(位置<0 ||位置> 本.LENGTH){ 戻り falseには; } // 新しいノードを作成 newNode =せて新たな新しい、ノード(要素) の現在せ = この.headを; // 頭部に挿入 する場合(位置== 0 ){ newNode.next = この.head; この .head = newNode; } // の最後に挿入 他 IF(==位置この.LENGTH){ // テイルノード見つけ ながら(!current.next = ヌル){ 電流 = ; current.next } current.next = ; newNode } // の中央に挿入された 他の{ // の正しい位置を見つける LETインデックス= 0 ; ながら(インデックス++!位置= - 1である。){ 電流 = current.next; } newNode.next = current.next; current.next = newNode; } この .LENGTH ++ ; 返す trueに; } // 一致指数の現在のデータ要素内 のindexOfを(エレメント){ // からリストトラバース させ電流= この.head; // 方法 // (LETインデックスの0 =;指数<this.length;インデックス++){ // 抽出と比較して//値リスト要素 // IF(current.data ===素子){ // //インデックスがに等しい戻り // リターン指数; // } // //は不等横断続ける // 現在= current.nextを; // } // 方法II インデックス= 0せながら(現在の){ // 抽出と比較して値のリスト要素IF(current.data === 要素){ // 添字戻りに等しい戻り指数; } // 不横断続ける 電流= 電流を.next; インデックス ++ ; } // 反復が依然として後に発見されていない// リターン-1 リターン -1 ; } // ノードが特定の場所削除// 0 removeAt(位置){ IF(位置<0 ||位置> = この .LENGTH) 返す 偽; 現在ましょう = この.head。 // 删除头 場合(位置== 0 ){ この .head = この.head.next。 } // 尾 そう であれば(位置== 本 .LENGTH - 1 ){ 以前せ = ヌルの 一方(current.next){ 以前 = 現在の 電流 = current.next。 } previous.next =NULL ; } // 中間 他{ // を除去するように設定されている現在のノードの前のノードを見つける LETインデックス= 0 しばらく(!=位置指標++ - 1 ){ 電流 = current.next } // 次現在のノード次のノードへの現在のノードの次のノードを指す current.next = current.next.next } この .length-- ; 返すtrueに; } (要素)を削除{ 戻り、この .removeAt(この.indexOf(素子)); } }