データ構造学習シリーズの一方向リンクリストの3つの挿入方法

  • 方法 1:
  • 単一リンクリストに头结点和第0个结点之间新しいノードを挿入します。つまり头插法、コードは次のようになります。
  • サンプルコード:
int insert_link_list_1(node_t *phead,int data){
    
    

    if(NULL == phead){
    
    


        printf("入参为NULL\n");

        return -1;

    }

    //创建新结点

    node_t *pnew = NULL;
    
    create_link_node_2(&pnew,data);
    //头插到链表
    pnew->next = phead->next;

    phead->next = pnew;

    return 0;
}
  • 手順:
  • 1. 新しいノードを作成しますpnew
  • 2. 0 番目のノードのアドレスを新しいノードのポインタ フィールド、すなわちpnew->next = phead->next;にポイントします。
  • 3. 新しいノードのアドレスをヘッド ノードのポインタ フィールド、つまりphead->next = pnew;にポイントします。
  • 方法 2:
  • 単一リンクリスト最后一个结点后面插入新结点、つまり の尾插法コードは次のとおりです。
  • サンプルコード:
int insert_link_list_2(node_t *phead,int data){
    
    

    if(NULL == phead){
    
    


        printf("入参为NULL\n");

        return -1;

    }

    //创建新结点

    node_t *pnew = NULL;
    
    create_link_node_2(&pnew,data);

    //遍历链表,找到最后一个结点

    node_t *ptemp = phead;

    while(NULL != ptemp->next){
    
    


        ptemp = ptemp->next;

    }

    ptemp->next = pnew;

    return 0;
}
  • 手順:
  • 1. 新しいノードを作成しますpnew
  • 2. リンク リストを走査し、リンク リストの最後のノードを見つけますptemp
  • 3. 新しいノードのアドレスを最後のノードのポインタ フィールド、つまりptemp->next = pnew;にポイントします。
  • 方法 3:
  • 単一リンクリストの任意の位置に新しいノードを挿入します。コードは次のとおりです。
  • サンプルコード:
int insert_link_list_3(node_t *phead,int pos,int data){
    
    

    if(NULL == phead){
    
    


        printf("入参为NULL\n");

        return -1;

    }

    if(pos < 0){
    
    

        printf("插入位置不合理,插入失败\n");

        return -1;

    }

    node_t *ptemp = phead;

    int i = 0;

    for(i = 0; i < pos; i++){
    
    

        if(NULL == ptemp){
    
    

            break;

        }
        ptemp = ptemp->next;
    }
    if(i < pos){
    
    

        printf("插入位置不合理,插入失败\n");

        return -1;


    }
    node_t *pnew = NULL;

    create_link_node_2(&pnew,data);

    pnew->next = ptemp->next;

    ptemp->next = pnew;

    return 0;
}
  • 手順:
  • 1. リンクされたリストをたどって、挿入される前のノード、つまりptemp;を見つけます。
  • 2. 新しいノードを作成しますpnew
  • 3. 挿入するノードのアドレスを新しいノードのポインタ フィールド、つまりpnew->next = ptemp->next;にポイントします。
  • 4. 新しいノードのアドレスを、挿入される位置にある前のノードのポインタ フィールド、つまりptemp->next = pnew;を指すようにします。

おすすめ

転載: blog.csdn.net/qq_41878292/article/details/132651643