1.我们知道链表无非就是增删改查这几个操作。而在指定结点前方或后方插入结点就是增加的一种体现
(1)在指定结点后方插入新结点
例子:1->2->3->4->5
当要在3和4之间插入新结点的时候(即在3的后方插入新结点)
步骤:1.先找到3(point->data == data
2.将3->next(即4的地址)赋给new->next,将新结点new与结点4建立了联系
即:new->next = 3->next;
3.完成上面两步骤后,再执行3->next = new;这样就完成了在3的后面插入了新的结点
切记步骤2和3不可调换。

直接上代码:

int inserFrontLinklist(struct Test* head,struct Test* new,int data1)
{struct Test* point = head;while(point != NULL){if(point->data == data1){//后插法的做法new->next = point->next;point->next = new;return 1;}point = point->next;}    return 0;
}

(2)在指定结点前方插入新结点
例子:1->2->3->4->5
在指定结点前方插入新结点要考虑两种情况,一种是特殊情况,看是否插入的位置是在链表头,另一种情况是正常插入,插入的地方不是链表头,那么我们一起来看看你两种情况怎么办。

1.如果要插入的点刚好是在链表头的话

 struct Test* point = head;if(point->data == data){new->next = head;return new;}//如果要找的那个数刚好在头结点的话那么直接插进去即可

以上两个操作就完成了在链表头插入新的结点的操作,但是记得return的是new,而不是head,因为现在的head已经发生了改变。

2.如果不是在链表头,即正常插入

while(point->next != NULL)//这里跟后插法的区别,后插法是直接判断point本身,而这里是判断point->next{if(point->next->data == data)//这里也一样,后插法是判断point->data,而这里是判断point->next->data;{new->next = point->next;//这里的算法跟后插法一样point->next = new;printf("Congratulations,you find the data success!\n");return head;}point = point->next;}

虽然这里的核心代码跟上面的后插法是一样的,但是两者的判断条件不一样,后插法的判断条件是while(point != NULL),而前插法的判断条件是while(point->next != NULL),一定要切记这两点

直接上代码:

struct Test* insertBehindLinklist(struct Test *head,struct Test* new,int data)
{//前插法的做法struct Test* point = head;if(point->data == data){new->next = head;return new;}//如果要找的那个数刚好在头结点的话那么直接插进去即可。while(point->next != NULL)//这里跟后插法的区别,后插法是直接判断point本身,而这里是判断point->next{if(point->next->data == data)//这里也一样,后插法是判断point->data,而这里是判断point->next->data;{new->next = point->next;//这里的算法跟后插法一样point->next = new;printf("Congratulations,you find the data success!\n");return head;}point = point->next;}printf("Sorry, you find error!\n");return head;
}

切记一点:如果链表头发生了改变的话,一定要返回新的链表头,如果链表头没发生变化的话,不用返回链表头,在main里也能检测到链表结点的变化(因为指针本身就是一个地址)

C语言链表之在指定结点前面或后面插入新的结点相关推荐

  1. c语言 链表_小陈的C语言笔记---链表(详细讲解基本操作和概念)

    关于链表的TIPS: 链表中各结点在内存中可以不是连续存放的,各数据接点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的. 在链表结点 的数据结构中,结构体内的 ...

  2. 一文看懂C语言链表(原创) --- 包含完整代码

    链表是一种可以动态的进行内存分配的数据结构 ### 相当于长度不固定的结构体数组 链表中的元素在内存中的地址可以是不连续的 链表这种数据结构必须使用指针才能实现 用结构体建立链表是最合适的 例如: s ...

  3. c语言 链表建立头插法尾插法,单链表的创建(头插法和尾插法)

    单链表的创建分为头插法和尾插法,头插法是不断地向头结点插入新的结点.这样会使你所插入的结点值呈现逆序,所以头插法也可以实现单链表的逆置.尾插法是不断地向插入的新元素之后再插入新的元素.需要注意的是头插 ...

  4. 以给定值x为基准将单链表分割为两部分,所有小于x的结点都排在大于或等于x的结点之前。

    #include "LinkList.cpp"                //现单链表的各种基本运算的算法文件单链表的基本运算算法_yyy_zxc的博客-CSDN博客 void ...

  5. c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...

    最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...

  6. 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  7. C语言基础-单向链表静态结构与动态结构删除(跳过)结点

    非真正意义上的删除节点,而是将该链表其中一个结点断开,连接到下一个结点 静态链表示例题目: 为五个学生的信息建立一个静态链表,每个学生信息结构如下: 学号 姓名 成绩 要求输入一个学号值,删除链表中该 ...

  8. 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...

    的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...

  9. 图书管理系统 C语言链表实现 学校大作业功能齐全(书籍信息以及用户信息保存在附带的txt文件中)

    不废话直接附上源代码下载链接(一杯奶茶钱就能换一套图书管理系统哦~): C语言链表实现图书管理系统功能齐全(书籍信息以及用户信息保存在附带的txt文件中)-C文档类资源-CSDN文库 抱歉本人总是忘记 ...

  10. 算法精解_C语言 链表_单链表(接口定义+类型实现)

    链表可以说是一种最为基础的数据结构.链表由一组元素以一种特定的顺序组合或链接而成,在维护数据的集合时很有用.这一点同我们常用的数组很相似.然而,链表在很多情况下比数组更有优势.特别是在执行插入和删除操 ...

最新文章

  1. 任务计划cron、服务管理工具chkconfig/systemctl
  2. windows 关闭端口被占用脚本
  3. 一个普通ERROR 1135 (HY000)错误引发的血案:
  4. Python3 多线程的两种实现方式
  5. Linux学习笔记4-CentOS7中redis3.2.9安装教程
  6. HDLBits答案(21)_Verilog有限状态机(8)
  7. 玩转Javascript 给JS写测试
  8. CF891B-Gluttony【构造】
  9. python-非负矩阵分解-NMF
  10. 构造函数与new关键字
  11. docker部署express项目
  12. 利用mfc项目opengl旋转正方形_C++学习之路:适合C++新手的练手项目,高薪之路必备项目...
  13. ecno是什么的缩写_nbcs是什么意思的缩写?
  14. java hotspot tm_Java HotSpot(TM) 64-Bit Server VM warning
  15. HC32L110(一) HC32L110 芯片介绍和Win10下DAP-Link, ST-Link, J-Link方式的烧录
  16. %2d, %02d, %d的区别
  17. android浏览器插件介绍
  18. 新概念英语(1-55)The Sawyer family
  19. R语言09-单变量绘图(频数分布直方图/折线图)
  20. PDA 查找无线报错 :Scan Error

热门文章

  1. AngularJS入门
  2. Java反射机制在工厂模式中的应用
  3. ubuntu下给谷歌chrome浏览器添加去广告的插件
  4. 西安适合计算机专业的研究所,计算机类专业比较厉害的6所大学,适合于中等偏上的学生报考...
  5. 4块硬盘掉线导致服务器崩溃解决过程
  6. Protocol(一)[概述]
  7. 【服务器数据恢复】IBM某型号服务器VMware虚拟机误删除的数据恢复案例
  8. java rfc接口_java调用sap的RFC接口
  9. python之生成器函数
  10. Kaggle泰坦尼克预测(完整分析)