C语言链表之在指定结点前面或后面插入新的结点
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语言链表之在指定结点前面或后面插入新的结点相关推荐
- c语言 链表_小陈的C语言笔记---链表(详细讲解基本操作和概念)
关于链表的TIPS: 链表中各结点在内存中可以不是连续存放的,各数据接点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的. 在链表结点 的数据结构中,结构体内的 ...
- 一文看懂C语言链表(原创) --- 包含完整代码
链表是一种可以动态的进行内存分配的数据结构 ### 相当于长度不固定的结构体数组 链表中的元素在内存中的地址可以是不连续的 链表这种数据结构必须使用指针才能实现 用结构体建立链表是最合适的 例如: s ...
- c语言 链表建立头插法尾插法,单链表的创建(头插法和尾插法)
单链表的创建分为头插法和尾插法,头插法是不断地向头结点插入新的结点.这样会使你所插入的结点值呈现逆序,所以头插法也可以实现单链表的逆置.尾插法是不断地向插入的新元素之后再插入新的元素.需要注意的是头插 ...
- 以给定值x为基准将单链表分割为两部分,所有小于x的结点都排在大于或等于x的结点之前。
#include "LinkList.cpp" //现单链表的各种基本运算的算法文件单链表的基本运算算法_yyy_zxc的博客-CSDN博客 void ...
- c语言数组指定位置插入和删除_玩转C语言链表,单链表/双向链表的建立/遍历/插入/删除...
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合, ...
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...
- C语言基础-单向链表静态结构与动态结构删除(跳过)结点
非真正意义上的删除节点,而是将该链表其中一个结点断开,连接到下一个结点 静态链表示例题目: 为五个学生的信息建立一个静态链表,每个学生信息结构如下: 学号 姓名 成绩 要求输入一个学号值,删除链表中该 ...
- 用c语言实现单链表的初始化,建表,查找,求长度,插入,删除等操作,【YTU+2430+C语言习题+链表建立+插入+删除+输(5)...
的打印.判断链表是否为空.计算链表长度.插入节点.删除节点.删除整个链表.(2) 线性表adt顺序存储实现中的创建.查找.插入和删除等基本操作及相关算法,线性表adt链式存储实现中单链表.循环链表和双 ...
- 图书管理系统 C语言链表实现 学校大作业功能齐全(书籍信息以及用户信息保存在附带的txt文件中)
不废话直接附上源代码下载链接(一杯奶茶钱就能换一套图书管理系统哦~): C语言链表实现图书管理系统功能齐全(书籍信息以及用户信息保存在附带的txt文件中)-C文档类资源-CSDN文库 抱歉本人总是忘记 ...
- 算法精解_C语言 链表_单链表(接口定义+类型实现)
链表可以说是一种最为基础的数据结构.链表由一组元素以一种特定的顺序组合或链接而成,在维护数据的集合时很有用.这一点同我们常用的数组很相似.然而,链表在很多情况下比数组更有优势.特别是在执行插入和删除操 ...
最新文章
- 任务计划cron、服务管理工具chkconfig/systemctl
- windows 关闭端口被占用脚本
- 一个普通ERROR 1135 (HY000)错误引发的血案:
- Python3 多线程的两种实现方式
- Linux学习笔记4-CentOS7中redis3.2.9安装教程
- HDLBits答案(21)_Verilog有限状态机(8)
- 玩转Javascript 给JS写测试
- CF891B-Gluttony【构造】
- python-非负矩阵分解-NMF
- 构造函数与new关键字
- docker部署express项目
- 利用mfc项目opengl旋转正方形_C++学习之路:适合C++新手的练手项目,高薪之路必备项目...
- ecno是什么的缩写_nbcs是什么意思的缩写?
- java hotspot tm_Java HotSpot(TM) 64-Bit Server VM warning
- HC32L110(一) HC32L110 芯片介绍和Win10下DAP-Link, ST-Link, J-Link方式的烧录
- %2d, %02d, %d的区别
- android浏览器插件介绍
- 新概念英语(1-55)The Sawyer family
- R语言09-单变量绘图(频数分布直方图/折线图)
- PDA 查找无线报错 :Scan Error
热门文章
- AngularJS入门
- Java反射机制在工厂模式中的应用
- ubuntu下给谷歌chrome浏览器添加去广告的插件
- 西安适合计算机专业的研究所,计算机类专业比较厉害的6所大学,适合于中等偏上的学生报考...
- 4块硬盘掉线导致服务器崩溃解决过程
- Protocol(一)[概述]
- 【服务器数据恢复】IBM某型号服务器VMware虚拟机误删除的数据恢复案例
- java rfc接口_java调用sap的RFC接口
- python之生成器函数
- Kaggle泰坦尼克预测(完整分析)