单链表-插入结点


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