4.数据结构单链表之链表成员的插入与删除

这一篇文章讲单链表的插入与删除:
1.首先通过尾插法函数来创建一个单链表:

listnode CreatlistTail(listnode* L, int a[], int len) {
    listnode* r = L; 
    for (int i = 0; i < len; i++) {
        listnode* trans = new listnode;  //创建想要插入的新成员结构
        trans->value = 0;
        trans->next = NULL;    //以上三句初始化均为新的listnode链表成员
        trans->value = a[i]; //创建一个待插入的指针
        r->next = trans; //将头节点指向新成员,因为是尾插法,这一步显得十分简单
        r = trans; //将最新的头节点存储到地址r上,上面说过了
    }
    return *L;
}

2.下面是单链表的插入函数

listnode ListnodeInsert(listnode* L,int index,int value) {      //链表插入函数
    int i = 0;
    int answer = 0; //初始相关寻找索引的参数
    listnode* trans = new listnode;
    listnode* p = L;
    trans->value = value;
    trans->next = NULL;  //以上是创建想要插入的单链表成员
    if (L->next == NULL) {  //判断链表是否为空 等等这好像不需要 哈哈
        cout << "此列表为空!" << endl; 
    }
    while (p&&(i+1) < index) {  //定位到要插入的位置
        p = p->next;
        i++;
    }
    if (!p || (i+1) > index) {   //判断是否是超限错误
        cout << "输入参数错误!(返回原始链表)" << endl;
        return *L;
    }
    trans->next = p->next; //进行插入操作
    p->next = trans;
    return *L;
}

3.单链表成员删除操作

listnode ListnodeDelete(listnode* L, int index) {   //删除指定位置上的数据
    listnode* p = L;
    listnode* r;
    int i = 0;
    if (L->next == NULL) {
        cout << "此列表为空!" << endl;
    }
    while (p&&i < index) { //定位到要删除的位置
        p = p->next;
        i++;
    }
    if (!p || i < index) {
        cout << "输入参数错误!(返回原始链表)" << endl;
        return *L;
    }
    r = p->next; //删除操作
    p->next = r->next;
    free(r);

    return *L;
}

4.main函数显示效果:

int main() {
    listnode test;
    int aa[5] = { 1,2,3,4,5 };
    test = CreatlistTail(&test, aa, 5);
    cout << "插入数据前:" << endl;
    showlist(&test);
    test = ListnodeInsert(&test, 2, 9);
    cout << "插入数据后:" << endl;
    showlist(&test);
    cout << "删除刚才插入的数据:" << endl;
    test = ListnodeDelete(&test, 10);

    showlist(&test);

    system("pause");
    return 0;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值