栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单向链表的实现--删除

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单向链表的实现--删除

本讲讲述单对向链表的第x个结点进行删除,示意图如下所示,

 用C语言实现如下,

singLinkList.h头文件内容声明如下:

int  SingLinkList_xPositionDelete(BOOKLT *bookHeadNode,uint8_t x);//删除指定的x结点

singLinkList.c文件内容定义如下:

//指定位置删除该位置的结点
int  SingLinkList_xPositionDelete(BOOKLT *bookHeadNode,uint8_t x)
{
     BOOKLT * p = NULL; //创建一个BOOKLT结构类型的指针
     BOOKLT * q = NULL; //创建一个BOOKLT结构类型的指针
     uint8_t i = 0;

     p = bookHeadNode;

     while( p && (i < x-1))//遍历找到指定删除结点的前一个结点
     {
         p=p->next;//
         i++;
     }

     if(!(p->next) || (i >x-1))//如果链表头结点的next为空,没有子结点;或结点的遍历累积变量超过指定删除结点的位置
     {
         return -1;
     }

     q = p->next; //pNode和p指向同一个结点
     p->next = q->next;//q->next跳过指定结点指向下一个节点pNode,如果是删除最后一个结点这里p->next = q->next=NULL;
     free(q);//必须释放指定删除的结点堆缓存
     return true;
}

main.c主文件内容实现如下:

int main()
{
    int n = 0;
    char findBookInfo[50];//定义一个用户装载手动输入的信息缓存
    BOOKLT *myBookHeadNode;//定义一个BOOKLT类型的头结点指针

    memset(findBookInfo,0,sizeof(findBookInfo));

    myBookHeadNode  = SingLinkList_Create();//上面的链表内存已经被释,重新放创建一个头结点
    SingLinkList_TailInsert_method2(myBookHeadNode,sizeof(bookStock)/sizeof(BOOKINFO),bookStock);//后插法插入节点
    printf("===========所有图书信息打印如下===========rn");
    SingLinkList_Traverse(myBookHeadNode);//遍历单向链表

   printf("rn============删除信息后打印如下============rn");
   SingLinkList_xPositionDelete(myBookHeadNode,16);
   SingLinkList_Traverse(myBookHeadNode);//遍历单向链表
   SingLinkList_Destory(myBookHeadNode);//释放各个结点的内存和头结点的内存

    return 0;
}

删除图书信息的前后如下图所示:

 

注意对比查看,"9787811231557,Eclipse基础与应用,35"这一项已经被删除。 

到此,链表的结点删除功能已实现,谢谢。

CSDN总提示说内容不够,我也写不了那么多,字数来凑吧。

2022.06.13结。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971346.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号