[]データ構造リスト - 単独でリンクされたリスト

単独リンクリスト:配列よりも効率的に削除挿入

// ノードノード作成
クラスをノード{ 
    コンストラクタ(データ){ 
        この .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(素子)); 
    } 
}
            
            

         

        

 

おすすめ

転載: www.cnblogs.com/ljl-zszy/p/11792646.html