單鏈表-插入結點


插入:在第 i 個結點前插入新節點

 

假設 i=3,插入后變成這樣

首先要找到第二個結點,然后修改第二個結點的next域,再修改 e結點 的next域

算法步驟:

① 首先找到 ai-1 結點的存儲位置 p;

② 生成一個數據域為 e 的新節點 s;

③ 插入新節點:

1.)新節點的指針域指向結點 ai:s->next = p->next;

2.)結點ai-1的指針域指向新節點:p->next = s

插入完成。注意!!!!步驟1.)和步驟2.)不能互換!!!否則會丟失 ai 的地址!!!

除非再定義一個指針變量存儲 ai 結點的地址!!!

代碼:

 

//在 L 中第 i 個元素之前插入數據元素 e
//插入一個新元素后,鏈表就多了一個元素,新的鏈表通過L返回,所以這個L也用了引用型的
Status ListInsert_L(LinkList &L, int i, ElemType e){
    p = L->next;
    j = 1;
    //如果輸入的i不合法,直接返回ERROR,不再繼續執行
    if(i<1){
        return ERROR;
    }
    //循環條件:指針p 不為空,計數器 j 的值還沒到 i-1 繼續執行。
    //如果 L 表結點數量比 i-1 小,那么運行着就會出現 指針p == NULL的情況
    while(p!=NULL && j!=i-1){
        p = p->next;
        j++;
    }
    //這里對應,如果 i-1 > j的情況
    if(p == NULL){
        return ERROR;
    }
    //生成新節點 s
    s = new LNode;
    //用新節點s的數據域存放 e
    s->data = e;
    //將結點s插入L中
    s->next = p->next;
    p->next = s;
    return OK;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM