リンクリストの指定した箇所に要素を追加

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

リンクリストでは、リンクリストの先頭に要素を追加する方法を考えました。
次は、リンクリストの途中の指定した箇所へと、要素を追加する方法です。

スポンサーリンク

リンクリストが3つの要素からなり、数が小さいほうから大きいほうへと並んでいるとします。

リンクリスト: 26, 72, 265

このリンクリストに、要素「55」を加えるとすると、リンクリストは、「26, 55, 72, 265」となる必要があります。
55を、26と72の間に入れる必要があるので、これを関数で表すと・・・

void linklist::enter(const std::string& item) {
    linklist_elem *before_ptr;    // 挿入ポイントの前の要素
    linklist_elem *after_ptr;    // 挿入ポイントの後の要素
 
    // 挿入ポイントの後の要素を、現在の先頭の要素に設定
    after_ptr = first_ptr;
    
    while (true) {
        // 要素を一つ進める
        before_ptr = after_ptr;
        after_ptr = after_ptr->next_ptr;
 
        // リストの終端チェック
        if (after_ptr == NULL)
            break;
 
        // 挿入ポイントか?
        if (item >= after_ptr->data)
            break;
    }
}

上記のコードで、新しい要素を挿入すべき箇所を発見できます。
次に、挿入される要素が、前後の要素を正しくポイントするようにしなければなりません。

// 新しい項目を作成
linklist_elem *new_ptr;
new_ptr = new linklist_elem;
ner_ptr->data = item;
 
// 1つ前の要素の次が、新しい要素をポイント
before_ptr->next_ptr = new_ptr;
 
// 新しい要素の次が、1つ後の要素をポイント
new_ptr->next_ptr = after_ptr;

コードは、上記のような感じとなる。

スポンサーリンク
 
スポンサーリンク