记录学习的第13天
今天,复习一下链表的删除节点操作

由于之前已经说过动态链表的实现,所以就不再说了;
码来!(剑来!)

1、
先创建结构体并且创建索引指针;

struct student{int data;
struct student *next;
};struct student *head,*p1,*p2;

这里为了方便只有一个数据和指向下个节点的指针;

2、
实现插入操作和打印功能

struct student *create(struct student *p){p1=(struct student *)malloc(sizeof(struct student));
scanf("%d",&p1->data);
if(p==NULL){p=p1;p2=p1;
}
else{p2->next=p1;p2=p1;
}
p2->next=NULL;
return p;
};void push(struct student *p){while(p!=NULL){printf("%d",p->data);
p=p->next;}
}

emmm…实现的方法在前面的文章有;
俺不想再说了,也很简单,思想懂了写的肯定比我的还简单;

好,那现在我们来说删除操作;
如果有一个学生成绩管理系统,你要删除某个学生,那么就要用到这个操作;
怎么实现呢;
这样,如果有个链表A->B->C->D->E;
如果实删除操作,其实很简单的;
如果我们要删除B这个节点,是不是,我们直接A->next=C就好了;
这时候B是不是就不在链表里面了;
就会变成A->C->D->E;

那如果用代码怎么实现呢,其实也很简单,就是这个原理;
由于链表我们不能直接表示BCDE;
只能有头结点A来实现;
那看下面这个表达式:
A->next=(A->next)->next;
哎?是不是就是刚才的A->next=C;
就是这么简单!


现在用程序来实现一下;
码来!

void del(){int x;
scanf("%d",&x);
struct student *p=head;
while(p!=NULL){if((p->next)->data==x){p->next=(p->next)->next;break;
}
p=p->next;
}
}

你会看到这里面我没有对head头结点操作,而是用一个指针p=head来操作,因为你不能随便改变head的值,不然你的链表会错乱,所以必须得用一个p来进行删除操作;
就是这么简单;

而且啊,你删除都做出来了,那查找信息,是不是更简单了,修改信息,是不是也不难了;

不过呢,这个功能是有bug的;
他不能删除head这个头结点;

解决办法嘛,也有很多;
可以自己想一想!
emmmm
给点提示吧,可以用一个有表头的链表来解决;
什么是有表头的链表;
就是我的head是null,从head往后的第一个节点开始储存数据;
这样head就不用删除了,只要从第二个开始就好了,完美的解决了这个问题;

还有吗,当然,还可设置两个指针,一个p1指向head,p2指向head->next;
再进行删除操作就不会有这个问题了!

当然还是建议再应用链表的时候一定要考虑是否要加入表头,有时候,一个表头能帮你简化很多代码!
测试我就不测试了,可以自己试一试!
ojbk!
今天结束
end;

C语言链表的删除操作相关推荐

  1. C语言数据结构-数组广义表-十字链表-实现十字链表的初始化操作-实现十字链表的删除操作

    十字链表 十字链表相关定义如下: typedef int ElemType;// 非零元素结点结构 typedef struct OLNode {int row,col;ElemType value; ...

  2. SWUSTOJ #953 单链表的删除操作的实现

    SWUSTOJ #953 单链表的删除操作的实现 题目 输入 输出 样例输入 样例输出 源代码 题目 建立长度为 n 的单链表,删除第 i 个结点之前的结点. 输入 第一行为自然数 n,表示链式线性表 ...

  3. C语言 链表创建及操作

    C语言 链表创建及操作 第一部分构建链表,定义结构体,分别用头插法.尾插法实现,这里封装了打印函数:printf();做练习方便后续使用:对链表进行查找,并将查找到的值构建一个新的链表:链表的转置:具 ...

  4. 西南科技大学OJ题 单链表的删除操作的实现0953

    单链表的删除操作的实现 1000(ms) 65535(kb) 2896 / 13622 建立长度为n的单链表,删除第i个结点之前的结点. 输入 第一行为自然数n,表示链式线性表的长度: 第二行为n个自 ...

  5. 953: 单链表的删除操作的实现

    题目描述 建立长度为n的单链表,删除第i个结点之前的结点. 输入 第一行为自然数n,表示链式线性表的长度: 第二行为n个自然数表示链式线性表各元素值: 第三行为指定的删除参数i. 输出 指定删除位置合 ...

  6. SWUST OJ 953: 单链表的删除操作的实现

    建立长度为n的单链表,删除第i个结点之前的结点. 第一行为自然数n,表示链式线表的长度: 第二行为n个自然数表示链式线性表各元素值: 第三行为指定的删除参数i. #include <stdio. ...

  7. C语言链表的删除代码实现

    struct student //结构变量student的定义 {long num; //变量内的元素float score;struct student *next; }; int n; struc ...

  8. 单链表 插入操作 和 删除操作 的易错点

    单链表中的插入操作: Status ListInsert(LinkList &L,int i,Elemtype e){cout<<"在第"<<i&l ...

  9. c语言链表中何时用点何时用箭头,链表基本操作及其过程详细叙述

    链表概述:链表是一种常见的数据结构.数组可以存放数据,但是使用数组时要先指定数组中包含元素的个数,即数组长度.但是如果向这个数组中加入的元素个数超过了数组的大小时,便不能将内容完全保存.例如在定义一个 ...

最新文章

  1. GSM Hacking Part① :使用SDR扫描嗅探GSM网络
  2. 【Spring实战】注入非Spring Bean对象
  3. 全民学后端快餐教程(1) - 只不过是写个Java程序
  4. 数据链路层的一些总结
  5. 把网页放到云服务器上,怎么把网页放到云服务器上
  6. 【muduo源码分析 】 MutexLock和MutexLockGuard封装
  7. mysql study_mysql_study_3
  8. ai人工智能的本质和未来_人工智能简介:这就是未来
  9. Python电影售票系统
  10. C艹入门 -> 入土
  11. 连锁药店携手电商开拓新局面
  12. 最新的 iPad开发项目 - Fotoboard for iPad
  13. linkerd 本地环境安装
  14. Springboot拦截器实现IP黑名单
  15. 微信小程序申请+开发+发布流程
  16. 品牌舆情监测系统简介,品牌舆情监测及应对方案?
  17. 前后台系统和RTOS系统的区别
  18. i++和++i的区别
  19. 阿里云国际版CDN的优势
  20. 网页无法显示GIF动画图片解决办法

热门文章

  1. virtualenv介绍及基本使用
  2. 荣耀v8升级android 8,荣耀V8强刷EMUI8.0系统图文教程(EMUI5.0直升EMUI8.0)
  3. 【爱奇艺】2019校招算法工程师笔试题
  4. 三菱PLC FX3U脉冲轴回原功能块(MC_Home_P)
  5. Mac book pro2014 雷雳有线网络获取不到地址
  6. SOLIDWORKS 应用白皮书之 CAD 建模应用篇
  7. 主板jrgb是什么_你的散热器接错了 解读主板4Pin接口
  8. vue element项目中 数组转字符串 字符串转数组
  9. android手机收不到推送消息推送消息,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?...
  10. Quicker中使用变量实现同一动作面板在不同设备上的不同配置