插入:在第 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; }