博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言实现单链表的遍历,逆序,插入,删除
阅读量:7053 次
发布时间:2019-06-28

本文共 3725 字,大约阅读时间需要 12 分钟。

单链表的遍历,逆序,插入,删除

#include
#include
#include
#define bzero(a, b) memset(a, 0, b)//windows平台下无bzero函数。 增加宏拓展移植性 struct node { int data; //有效数据 struct node *pNext;//指向下一个节点的指针 }; struct node * make_node(int data) { struct node *p=(struct node*)malloc(sizeof(struct node)); if(NULL==p) { printf("malloc error\n"); return NULL; } //清理申请到的内存 bzero(p,sizeof(struct node)); //填充节点 p->data=data; p->pNext=NULL;//将来要指向下一个节点的首地址 //实际操作时将下一个节点的malloc 返回的指针给他。 return p; } void in_tail( struct node *pH,struct node *new_node)//节点尾部插入 { //(1)先找到最后一个节点 //(2)插入 int cnt=0; struct node *p=pH; while(NULL!=p->pNext) { p=p->pNext; cnt++; } p->pNext=new_node; pH->data=cnt+1;// 头节点数据代表链表个数 } void in_head(struct node *pH,struct node *new_node) { //头节点next指向新节点地址 //新结点next指向之前第一个节点地址 //头节点data++ new_node->pNext=pH->pNext; pH->pNext=new_node; pH->data++; } void ergodic(struct node *pH)//遍历 { int cnt=0; struct node *p=pH; /* printf("------开始遍历------\n");//这样包含头结点 while(NULL!=p->pNext) { printf("第%d节点数据为为%d\n",cnt,p->data); p=p->pNext; cnt++; } printf("第%d节点数据为为%d\n",cnt,p->data); printf("------结束遍历------\n"); } */ printf("------开始遍历------\n"); while(NULL!=p->pNext) { cnt++; p=p->pNext; printf("第%d节点数据为为%d\n",cnt,p->data); } printf("------结束遍历------\n"); }void del_1(struct node *pH,int num)//根据节点数删除 不能删除0(头节点) { //1找到 //2删除 //删除(释放内存。指向下一个) int cnt=0; struct node *p=pH; struct node *p_sb;;//临时变量释放内存用 while(NULL!=p->pNext) { cnt++; if(num==cnt) { p_sb=p->pNext;//p为预删除点的上一个节点 p->pNext=p->pNext->pNext;//跳过欲删除节点指向下下个节点。 free(p_sb);//释放内存 break; } p=p->pNext;//不满足上述条件时 寻找下一个节点 } } void del_2(struct node *pH,int data)//删除指定数据 { //1找到 //2删除 //删除(释放内存。指向下一个) struct node *p=pH; struct node *p_sb;;//临时变量释放内存用 while(NULL!=p->pNext) { if(data==p->pNext->data)//p为预删除点的上一个节点 { p_sb=p->pNext; p->pNext=p->pNext->pNext; free(p_sb); continue; } p=p->pNext; } } void Nixu(struct node *pH)//逆序 { struct node *p=pH->pNext; struct node *p_sb;//临时变量释放内存用 if((NULL==pH->pNext)||(NULL==p)) return;//无节点直接退出 while(NULL!=p->pNext) { p_sb=p->pNext; if(p==pH->pNext)//第一个节点,放最后面 { p->pNext=NULL; } else { p->pNext=pH->pNext;//当前节点插入第一个节点前。 //或者说将当前节点作为第一个节点。 } pH->pNext=p; //更新第一节点地址。 p=p_sb; //指向下一个节点 //p=p->pNext; //指向下一个节点 } in_head(pH,p); } int main(){ int n; //定义头指针 // struct node *pHead= NULL; struct node *pHead=make_node(0);//初始化头节点; // in_tail(pHead,make_node(2223)); in_head(pHead,make_node(1)); in_head(pHead,make_node(2)); in_head(pHead,make_node(3)); in_head(pHead,make_node(4)); in_head(pHead,make_node(5)); in_head(pHead,make_node(6)); ergodic(pHead); Nixu(pHead); /* printf("输入要删除的节点数:"); scanf("%d",&n); del_1(pHead,n); */ //del_2(pHead,3); ergodic(pHead); return 0;}

 

转载于:https://www.cnblogs.com/PengfeiSong/p/6280424.html

你可能感兴趣的文章
深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
查看>>
HDU 1181 变形课 【DFS】
查看>>
MySQL事务
查看>>
7月26日实习日志
查看>>
Django之 路由系统
查看>>
UVa 679 Dropping Balls (例题 6-6)
查看>>
FileWriter写数据
查看>>
【Andorid X 项目笔记】TextView字幕效果(3)
查看>>
HDU 1002
查看>>
练习markdown语法
查看>>
python 制作自定义包并安装到系统目录
查看>>
大文件排序问题
查看>>
php实现rar文件的读取和解压
查看>>
2014年天津市第一批科技计划项目
查看>>
@芥末的糖 ---------- node连接数据库两种方式mysql和moogoDB
查看>>
MongoDB 学习笔记2----条件操作符
查看>>
关于Hibernate5.x的那点事
查看>>
sk-learn 选择正确的估算器
查看>>
python操作mysql数据库
查看>>
erp的核心代码,替代orm
查看>>