C语言面试题分类->链表
链表的创建,清空,插入,删除
typedef int (* __compfunc)(const void *, const void *); //Traverse list. Fast macro to traverse the list.
#define linklist_next(al) \
((al) && ((al)=(al)->next) ? (al)->data : NULL) typedef struct linklist
{
void * data;
struct linklist * next;
} linklist_t; //Allocate a new list data structure
linklist_t * linklist_create()
{
linklist_t *ll;
ll = (linklist_t *) calloc(, sizeof(linklist_t));
return ll;
} //Destroy the list ll.
void linklist_destroy(linklist_t *ll)
{
if (ll) {
linklist_t *current = NULL;
while ((current=ll)) {ll = ll->next; free(current);}
}
} //Insert an element at the tail of a list.
int linklist_add(linklist_t *ll, void *data)
{
if (ll) {
linklist_t *node = NULL;
if ((node=(linklist_t *)calloc(, sizeof(linklist_t))) == )
return -;
while (ll->next) ll = ll->next;
node->data = data;
node->next = ll->next;
ll->next = node;
return ;
}
return -;
} //Remove element from the list.
int linklist_remove(linklist_t *ll, void *data)
{
if (ll) {
linklist_t *prev = NULL;
while (ll->next) {
prev = ll;
ll = ll->next;
if (ll->data == data) {
prev->next = ll->next;
free(ll);
return ;/* Success */
}
}//while
}
return ; /* object not found or NULL list */
} // Do an insertion sort algorithm on the list. An empty list is already
// sorted and so is a single element list.
int linklist_insert(linklist_t *ll, void *data, __compfunc cbcomp)
{
if (ll) {
linklist_t *node=NULL, *prev=NULL;
if (!cbcomp)
return linklist_add(ll, data);
if ((node=(linklist_t *)calloc(, sizeof(linklist_t))) == )
return -;
node->data = data;
if (!ll->next) {
ll->next = node;
return ;
}
for (prev=ll,ll=ll->next; ll; prev=ll,ll=ll->next) {
if (cbcomp(data, ll->data) <= ) {
prev->next = node;
node->next = ll;
return ;
}
}
prev->next = node;
}
return ;
} 4.链表的逆序
- LinkNode* ReverseLink(LinkNode* head)
- {
- LinkNode *prev=NULL, *next=NULL;
- while(head)
- {
- next = head->next;
- head->next = prev;
- prev = head;
- head = next;
- }
- return prev;
- }
C语言面试题分类->链表的更多相关文章
- C语言面试题分类->指针
有关指针的经典面试题 C语言为何如此长寿并实用?C++为什么有那么多精彩?指针可以说是C/C++中的灵魂所在,虽然早期中pascal也有指针,但是和C/C++比起来不是一个级别的.今天为大家深入浅出的 ...
- C语言面试题22. 链表中倒数第k个节点
要求:输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5.6. ...
- C语言面试题分类->回调
本文主要讲解如果实现回调,特别是在封装接口的时候,回调显得特别重要,我们首先假设有两个程序员在写代码,A程序员写底层驱动接口,B程序员写上层应用程序,然而此时底层驱动接口A有一个数据d需要传输给B,此 ...
- C语言面试题分类->字符串处理
1.strlen:计算字符串长度(不包含'\0') 实现想法:遍历字符串,直到'\0'结束 #include<stdio.h> #include<stdlib.h> #incl ...
- C语言面试题分类->排序算法
1.选择排序. 每次将最小的数,与剩余数做比较.找到更小的,做交换. 时间复杂度:O(n²) 空间复杂度:O(1) 优缺点:耗时但内存空间使用小. void selectSort(int *p,int ...
- C语言面试题分类->位运算
1.不用临时变量交换两个整数. a = a ^ b; b = a ^ b; a = a ^ b; 2.实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如9的二进制是1001,则输出2. i ...
- C语言面试题分类->宏定义
1.写一个“标准”宏,这个宏输入两个参数并返回较小的一个 答:#define MIN(x, y) ((x)<(y)?(x):(y))//注意x,y要加括号,因为x,y如果有复合运算会出现问题. ...
- 嵌入式开发—C语言面试题
嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929 1. 用预处理指令#define 声明一个常数,用 ...
- 转 C语言面试题大汇总
转 C语言面试题大汇总,个人觉得还是比较全地!!! \主 题: C语言面试题大汇总,个人觉得还是比较全地!!! 作 者: free131 (白日?做梦!) 信 誉 值: 100 ...
随机推荐
- Maven将代码及依赖打成一个Jar包的方式
Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...
- ASP.NET 异步返回的Action (编辑中。。。)
新学.net,最近用到了ABP框架,发现了如下代码: public override async Task<UserDto> Get(EntityDto<long> input ...
- idea工具maven生命周期clean,compile,install,package区别
idea工具maven projects里面有9种生命周期,今天刚好遇到,顺便分享下自己的理解.生命周期是包含在一个项目构建中的一系列有序的阶段.最常用的两种打包方法:一:clean,package( ...
- spring-mvc访问本地html文件
项目中要用到在线预览word文档,刚开始考虑是要将word转成pdf文件,然后再直接在浏览器打开pdf文档即可, 但是项目部署在Linux下,在网上搜了一下没有找到合适的方法, 后来项目组讨论用POI ...
- js replace替换字符串,同时替换多个方法
在实际开发中,经常会遇到替换字符串的情况,但是大多数情况都是用replace替换一种字符串,本文介绍了如何使用replace替换多种指定的字符串,同时支持可拓展增加字符串关键字. let conten ...
- js中valueOf方法的使用
今天一位刚毕业的同事问了我一个问题,为什么这段代码执行结果是-1.代码如下: var o = { valueOf: function(){ return -1; } }; o = +o; 当时我也是懵 ...
- Git 的使用(皮毛))
1.安装git 软件(下一步直到完成) 2.码云注册(保存代码) 3.创建代码托管仓库 4.创建文件夹 5.写东西并提交到码云 1.在某个文件夹下写东西 2.写完之后在此文件夹下鼠标右键,并选择[gi ...
- git - 2.github
注册账户 ... 配置公私钥 https://help.github.com/en/articles/connecting-to-github-with-ssh github helloworld
- vs2017 EFCore 迁移数据库命令
项目结构: 首先引用 Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.Design 增加类DesignTimeDbC ...
- js将某个值转换为String字符串类型或转换为Number数字类型
将某个值转换为String类型 1. value.toString() toString()方法返回一个表示该对象的字符串 var a = 123 a.toString() // '123' 2. & ...