单链表(linux c)
因为之前对链表反转这一块一直记忆不清,现在复习总结一下,只要还是要了解复习指针地址操作,结构体定义。
方法1:采用前插得方法,把节点从前边取出来然后再插到前边;分三步(具体看分解图)
<一>先将第一个数字节点和头断开,然后接到链表最后
<二>然后按照上边的方法把剩下的链表中的节点一个接一个的插到前边
<三>直到将所有的节点插完,然后将新的头结点和head相连
先上完整的反转代码。。链表中存入了15个数
void fanxu(list *plist) { //标记首先需要的三个节点 list *pwei=plist; list *per=plist->pnext; list *ptemp=NULL; while(pwei->pnext!=NULL) { pwei=pwei->pnext; } while(pwei!=per) { ptemp=per; //永远标记第二个节点 per=per->pnext; //第一次要把链表头断掉 if(pwei->pnext==NULL) { pwei->pnext=ptemp; ptemp->pnext=NULL; //断掉 } else { ptemp->pnext=pwei->pnext; //前插 pwei->pnext=ptemp; //然后再一块接到尾指针 } plist->pnext=per; //为了打印显示,可以省 printf("per-jietou--****************************************************************************************\n"); showlist(plist); plist->pnext=pwei; //为了打印显示,可以省 printf("pwei-jietou--***************************************************************************************\n"); showlist(plist); printf("\n\n\n"); } plist->pnext=per; }
第一步:<一>先将第一个数字节点和头断开,然后接到链表最后
第二步:<二>然后按照上边的方法把剩下的链表中的节点一个接一个的插到前边
………
第三步: <三>直到将所有的节点插完,然后将新的头结点和head相连
########################################################################################
方法2:在方法1的基础上改进简化(创建新标志位) 主要理解while(p)是判断节点p的地址,p=q 是地址之间的重新赋值
<一>定义三个新的节点标志位p q pr 将链表的前一个节点插下来;
<二> 然后将节点插到一个新的标志位后边,同样的方法插后边的节点
<三>插完之后将新的标志位连接到之前的头结点打印
****************************************************************************************************************
void fanxu_gao(list *plist) { list *pr; list *p=plist->pnext; list *q=NULL; plist->pnext =NULL; while(p) { pr=p->pnext; //记录第二个地址 p->pnext=q; q=p; //可以理解成给q和p重新赋值新地址 p=pr; //标记第二个地址 plist->pnext=q; //打印显示,可以没有 printf("qqqqqqqqqqqqqqqqqg#############################################\n"); showlist(plist); plist->pnext=p; // 打印显示可以没有 printf("ppppppppppppppppppppz#############################################\n"); showlist(plist); printf("\n\n\n"); } plist->pnext=q; }
************************************************************************************************************************
<一>定义三个新的节点标志位p q pr 将链表的前一个节点插下来;
<二> 然后将节点插到一个新的标志位后边,同样的方法插后边的节点
<三>插完之后将新的标志位连接到之前的头结点打印
***************************************************************************************************************************
最后在给大家分享些关于链表的资料可以进一步参考
单链表
http://www.makeru.com.cn/live/5413_1924.html?s=45051
C语言玩转链表
http://www.makeru.com.cn/live/1392_338.html?s=45051
指针
http://www.makeru.com.cn/live/1392_238.html?s=45051
原文地址:https://www.cnblogs.com/8734ujn/p/11583796.html
- Codeforce GYM 100741 A. Queries
- UVA - 11178 Morley's Theorem
- PyMySQL模块的使用
- Python之进程
- Angularjs 通过asp.net web api认证登录
- P3391 【模板】文艺平衡树(Splay)
- 零基础入门小程序 &实战经验分享
- mysql explain详解
- 【前沿】Pytorch开源VQA神经网络模块,让你快速完成看图问答
- #106. 二逼平衡树(附带详细代码注释)
- TensorFlow.js、迁移学习与AI产品创新之道
- Java JDBC MySQL
- python内置函数大全
- Mysql配置和连接池配置样例。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 变量的删除与替换
- linux 正则表达式详解
- grafana使用教程之安装worldPing插件
- 同事:把"重试"抽象出来做个工具类吧
- Redis慢查询日志
- LinkedList源码阅读笔记
- RTSP协议网络摄像头接入视频平台EasyNVR
- 在 Hiplot 中使用 Sigflow
- 0805-CDH5中的Parquet迁移至CDP中兼容性验证
- 为什么我的Redis这么“慢”?
- Nginx系列:数据压缩
- Ray,面向新兴AI应用的分布式框架
- 60.Vue export default 和 export 的使用方式
- Idea开发maven插件
- redis实战 migrate异常NOAUTH Authentication required.