C语言基础 - 实现单向链表
回归C基础
实现一个单向链表,并有逆序功能 (大学数据结构经常是这么入门的)
//定义单链表结构体
typedef struct Node{
int value;
struct Node *next;
}Node;
//创建链表
Node* createNode(int value,Node *next){
Node *node = malloc(sizeof(Node));
node->value = value;
node->next = next;
return node;
}
//打印链表
void printList(Node *list){
for (Node *node = list; node != NULL; node = node->next) {
printf("current node value %d \n",node->value);
}
}
//反转链表
Node* reverse(Node *listNode){
Node *reList = NULL;
Node *tmp;
while (listNode != NULL) {
tmp = malloc(sizeof(Node));
//逆转之后,原链表的头结点就是新链表的尾结点
//如果不是第一个结点,则本次产生的新结点是上次结点的前一个
if (reList == NULL) {
tmp->next = NULL;
}else{
tmp->next = reList;
}
tmp->value = listNode->value;
reList = tmp;
listNode = listNode->next;
}
//原链表的最后一个结点是新链表的头结点
return reList;
}
//销毁
void destroyList(Node *list){
Node *tmp;
while (list != NULL) {
tmp = list;
list = list->next;
free(tmp);
}
printf("链表销毁\n");
}
测试打印结果
int main(int argc, const char * argv[]) {
@autoreleasepool {
Node *first = createNode(0, NULL);
Node *list = first;
first->next = createNode(2, NULL);
first = first->next;
first->next = createNode(3, NULL);
first = first->next;
first->next = createNode(4, NULL);
first = first->next;
first->next = createNode(7, NULL);
first = first->next;
printf("源数据:\n");
printList(list);
printf("反转后数据:\n");
list = reverse(list);
printList(list);
destroyList(list);
}
return 0;
}
结果:
C语言基础 - 实现单向链表的更多相关文章
- C语言 - 基础数据结构和算法 - 单向链表
听黑马程序员教程<基础数据结构和算法 (C版本)>,照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友可 ...
- ZT C语言链表操作(新增单向链表的逆序建立)
这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...
- c语言之单向链表
0x00 什么是链表 链表可以说是一种最为基础的数据结构了,而单向链表更是基础中的基础.链表是由一组元素以特定的顺序组合或链接在一起的,不同元素之间在逻辑上相邻,但是在物理上并不一定相邻.在维护一组数 ...
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...
- C语言单向链表
1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中 ...
- C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。
// // main.c // dynamic_link_list // // Created by ma c on 15/8/5. // Copyright (c) 2015. All ri ...
- C语言实现简单的单向链表(创建、插入、删除)及等效STL实现代码
实现个算法,懒得手写链表,于是用C++的forward_list,没有next()方法感觉很不好使,比如一个对单向链表的最简单功能要求: input: 1 2 5 3 4 output: 1-> ...
- C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,
//将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换. #include <stdio.h> #include <string.h> void fun ...
- C语言:将带头节点的单向链表结点域中的数据从小到大排序。-求出单向链表结点(不包括头节点)数据域中的最大值。-将M*N的二维数组中的数据,按行依次放入一维数组,
//函数fun功能是将带头节点的单向链表结点域中的数据从小到大排序. //相当于数组的冒泡排序. #include <stdio.h> #include <stdlib.h> ...
随机推荐
- jquery不兼容input的change事件处理
因为客户使用系统一般都是用IE版本的浏览器,所以每次在chrome下调试之后都要在IE走一遍; 这次准备在选择开始时间或者结束时间之后在下方能及时给出对应的天数,但是在IE8下试了change时间根本 ...
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- 移动办公OA系统
好久没有更新文章了,总觉得心里空空的,最近由于工作的原因,没有来的及及时更新,总感觉应该把学习到的东西做个记录,供大家学习,也供自己复习,温故而知新.今天趁着周末休息时间,把自己最近在公司的做的项目做 ...
- TIOBE:全球编程语言最新排名(Kotlin排名进入前50名)
作为coder,大家当然关心自己所使用语言的应用趋势.要是几年后所用语言变得默默无闻,那岂不是之前的知识储备与经验积累都会大打折扣.TIOBE排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量 ...
- mysql数据与Hadoop之间导入导出之Sqoop实例
前面介绍了sqoop1.4.6的 如何将mysql数据导入Hadoop之Sqoop安装,下面就介绍两者间的数据互通的简单使用命令. 显示mysql数据库的信息,一般sqoop安装测试用 sqoop l ...
- ajax异步加载遮罩层特效
<!doctype html> <html> <head> <title>遮罩层(正在加载中)</title> <meta chars ...
- Array和ArrayList的区别与联系
博主今天去了一个java的实习面试,发现有好多java最基础的数据结构对于博主来说反而感到陌生,在面试官问一些常见的例如HashMap这样的数据结构,博主能回答的头头是道,但是在问到Array和Arr ...
- Ionic/Angularjs 知识点解析
Ionic/Angularjs 知识点解析 angular-ui-router(状态跳转) state的定义:(在app.js的config下配置) $stateProvider .state('ap ...
- Dagger2在Android开发中的应用
世界是普遍联系的,任何事物和个体都直接或间接相互依赖,在时空长河中共同发展.在面向对象的世界中,更是如此,类与类之间的依赖,关联关系,模块(亦或是分层架构中的层)之间的耦合关系,都是我们在软件开发实践 ...
- python - bilibili(四)抓包数据乱码
上一篇文章中不知道大家发现端倪木有,两张照片对比很明显发现第一张是信息很明显的,第二张是乱码的. 为什么会出现这种情况?细心的童鞋可能发现是我们发送给服务器的请求连接的数据不同: 第一张图的信息是{& ...